d641ebc5da5e3b8157b4d80dd8f7c039.json 159 KB
{"ast":null,"code":"/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n\n/* eslint-disable no-proto */\n'use strict';\n\nvar base64 = require('base64-js');\n\nvar ieee754 = require('ieee754');\n\nvar isArray = require('isarray');\n\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\n\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();\n/*\n * Export kMaxLength after typed array support is determined.\n */\n\nexports.kMaxLength = kMaxLength();\n\nfunction typedArraySupport() {\n  try {\n    var arr = new Uint8Array(1);\n    arr.__proto__ = {\n      __proto__: Uint8Array.prototype,\n      foo: function () {\n        return 42;\n      }\n    };\n    return arr.foo() === 42 && // typed array instances can be augmented\n    typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n    arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction kMaxLength() {\n  return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;\n}\n\nfunction createBuffer(that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length');\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length);\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length);\n    }\n\n    that.length = length;\n  }\n\n  return that;\n}\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\n\nfunction Buffer(arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length);\n  } // Common case.\n\n\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error('If encoding is specified then the first argument must be a string');\n    }\n\n    return allocUnsafe(this, arg);\n  }\n\n  return from(this, arg, encodingOrOffset, length);\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n// TODO: Legacy, not needed anymore. Remove in next major version.\n\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype;\n  return arr;\n};\n\nfunction from(that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number');\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length);\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset);\n  }\n\n  return fromObject(that, value);\n}\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\n\n\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length);\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype;\n  Buffer.__proto__ = Uint8Array;\n\n  if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    });\n  }\n}\n\nfunction assertSize(size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number');\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative');\n  }\n}\n\nfunction alloc(that, size, fill, encoding) {\n  assertSize(size);\n\n  if (size <= 0) {\n    return createBuffer(that, size);\n  }\n\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);\n  }\n\n  return createBuffer(that, size);\n}\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding);\n};\n\nfunction allocUnsafe(that, size) {\n  assertSize(size);\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0;\n    }\n  }\n\n  return that;\n}\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size);\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size);\n};\n\nfunction fromString(that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8';\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding');\n  }\n\n  var length = byteLength(string, encoding) | 0;\n  that = createBuffer(that, length);\n  var actual = that.write(string, encoding);\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual);\n  }\n\n  return that;\n}\n\nfunction fromArrayLike(that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0;\n  that = createBuffer(that, length);\n\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255;\n  }\n\n  return that;\n}\n\nfunction fromArrayBuffer(that, array, byteOffset, length) {\n  array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds');\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds');\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array);\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset);\n  } else {\n    array = new Uint8Array(array, byteOffset, length);\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array;\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array);\n  }\n\n  return that;\n}\n\nfunction fromObject(that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0;\n    that = createBuffer(that, len);\n\n    if (that.length === 0) {\n      return that;\n    }\n\n    obj.copy(that, 0, 0, len);\n    return that;\n  }\n\n  if (obj) {\n    if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0);\n      }\n\n      return fromArrayLike(that, obj);\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data);\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');\n}\n\nfunction checked(length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');\n  }\n\n  return length | 0;\n}\n\nfunction SlowBuffer(length) {\n  if (+length != length) {\n    // eslint-disable-line eqeqeq\n    length = 0;\n  }\n\n  return Buffer.alloc(+length);\n}\n\nBuffer.isBuffer = function isBuffer(b) {\n  return !!(b != null && b._isBuffer);\n};\n\nBuffer.compare = function compare(a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers');\n  }\n\n  if (a === b) return 0;\n  var x = a.length;\n  var y = b.length;\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n};\n\nBuffer.isEncoding = function isEncoding(encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true;\n\n    default:\n      return false;\n  }\n};\n\nBuffer.concat = function concat(list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers');\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0);\n  }\n\n  var i;\n\n  if (length === undefined) {\n    length = 0;\n\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length;\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length);\n  var pos = 0;\n\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i];\n\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers');\n    }\n\n    buf.copy(buffer, pos);\n    pos += buf.length;\n  }\n\n  return buffer;\n};\n\nfunction byteLength(string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length;\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength;\n  }\n\n  if (typeof string !== 'string') {\n    string = '' + string;\n  }\n\n  var len = string.length;\n  if (len === 0) return 0; // Use a for loop to avoid recursion\n\n  var loweredCase = false;\n\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len;\n\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length;\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2;\n\n      case 'hex':\n        return len >>> 1;\n\n      case 'base64':\n        return base64ToBytes(string).length;\n\n      default:\n        if (loweredCase) return utf8ToBytes(string).length; // assume utf8\n\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\n\nBuffer.byteLength = byteLength;\n\nfunction slowToString(encoding, start, end) {\n  var loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\n  if (start === undefined || start < 0) {\n    start = 0;\n  } // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n\n\n  if (start > this.length) {\n    return '';\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length;\n  }\n\n  if (end <= 0) {\n    return '';\n  } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n\n\n  end >>>= 0;\n  start >>>= 0;\n\n  if (end <= start) {\n    return '';\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end);\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end);\n\n      case 'ascii':\n        return asciiSlice(this, start, end);\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end);\n\n      case 'base64':\n        return base64Slice(this, start, end);\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end);\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = (encoding + '').toLowerCase();\n        loweredCase = true;\n    }\n  }\n} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\n\n\nBuffer.prototype._isBuffer = true;\n\nfunction swap(b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16() {\n  var len = this.length;\n\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits');\n  }\n\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1);\n  }\n\n  return this;\n};\n\nBuffer.prototype.swap32 = function swap32() {\n  var len = this.length;\n\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits');\n  }\n\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3);\n    swap(this, i + 1, i + 2);\n  }\n\n  return this;\n};\n\nBuffer.prototype.swap64 = function swap64() {\n  var len = this.length;\n\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits');\n  }\n\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7);\n    swap(this, i + 1, i + 6);\n    swap(this, i + 2, i + 5);\n    swap(this, i + 3, i + 4);\n  }\n\n  return this;\n};\n\nBuffer.prototype.toString = function toString() {\n  var length = this.length | 0;\n  if (length === 0) return '';\n  if (arguments.length === 0) return utf8Slice(this, 0, length);\n  return slowToString.apply(this, arguments);\n};\n\nBuffer.prototype.equals = function equals(b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');\n  if (this === b) return true;\n  return Buffer.compare(this, b) === 0;\n};\n\nBuffer.prototype.inspect = function inspect() {\n  var str = '';\n  var max = exports.INSPECT_MAX_BYTES;\n\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n    if (this.length > max) str += ' ... ';\n  }\n\n  return '<Buffer ' + str + '>';\n};\n\nBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer');\n  }\n\n  if (start === undefined) {\n    start = 0;\n  }\n\n  if (end === undefined) {\n    end = target ? target.length : 0;\n  }\n\n  if (thisStart === undefined) {\n    thisStart = 0;\n  }\n\n  if (thisEnd === undefined) {\n    thisEnd = this.length;\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index');\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0;\n  }\n\n  if (thisStart >= thisEnd) {\n    return -1;\n  }\n\n  if (start >= end) {\n    return 1;\n  }\n\n  start >>>= 0;\n  end >>>= 0;\n  thisStart >>>= 0;\n  thisEnd >>>= 0;\n  if (this === target) return 0;\n  var x = thisEnd - thisStart;\n  var y = end - start;\n  var len = Math.min(x, y);\n  var thisCopy = this.slice(thisStart, thisEnd);\n  var targetCopy = target.slice(start, end);\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i];\n      y = targetCopy[i];\n      break;\n    }\n  }\n\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\n\n\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1; // Normalize byteOffset\n\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset;\n    byteOffset = 0;\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff;\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000;\n  }\n\n  byteOffset = +byteOffset; // Coerce to Number.\n\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : buffer.length - 1;\n  } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1;else byteOffset = buffer.length - 1;\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0;else return -1;\n  } // Normalize val\n\n\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding);\n  } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1;\n    }\n\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n  } else if (typeof val === 'number') {\n    val = val & 0xFF; // Search for a byte value [0-255]\n\n    if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n      }\n    }\n\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n  }\n\n  throw new TypeError('val must be string, number or Buffer');\n}\n\nfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1;\n  var arrLength = arr.length;\n  var valLength = val.length;\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase();\n\n    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1;\n      }\n\n      indexSize = 2;\n      arrLength /= 2;\n      valLength /= 2;\n      byteOffset /= 2;\n    }\n  }\n\n  function read(buf, i) {\n    if (indexSize === 1) {\n      return buf[i];\n    } else {\n      return buf.readUInt16BE(i * indexSize);\n    }\n  }\n\n  var i;\n\n  if (dir) {\n    var foundIndex = -1;\n\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i;\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex;\n        foundIndex = -1;\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true;\n\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false;\n          break;\n        }\n      }\n\n      if (found) return i;\n    }\n  }\n\n  return -1;\n}\n\nBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1;\n};\n\nBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n};\n\nfunction hexWrite(buf, string, offset, length) {\n  offset = Number(offset) || 0;\n  var remaining = buf.length - offset;\n\n  if (!length) {\n    length = remaining;\n  } else {\n    length = Number(length);\n\n    if (length > remaining) {\n      length = remaining;\n    }\n  } // must be an even number of digits\n\n\n  var strLen = string.length;\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');\n\n  if (length > strLen / 2) {\n    length = strLen / 2;\n  }\n\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16);\n    if (isNaN(parsed)) return i;\n    buf[offset + i] = parsed;\n  }\n\n  return i;\n}\n\nfunction utf8Write(buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nfunction asciiWrite(buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length);\n}\n\nfunction latin1Write(buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length);\n}\n\nfunction base64Write(buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length);\n}\n\nfunction ucs2Write(buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nBuffer.prototype.write = function write(string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8';\n    length = this.length;\n    offset = 0; // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset;\n    length = this.length;\n    offset = 0; // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0;\n\n    if (isFinite(length)) {\n      length = length | 0;\n      if (encoding === undefined) encoding = 'utf8';\n    } else {\n      encoding = length;\n      length = undefined;\n    } // legacy write(string, encoding, offset, length) - remove in v0.13\n\n  } else {\n    throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\n  }\n\n  var remaining = this.length - offset;\n  if (length === undefined || length > remaining) length = remaining;\n\n  if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds');\n  }\n\n  if (!encoding) encoding = 'utf8';\n  var loweredCase = false;\n\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length);\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length);\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length);\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length);\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length);\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length);\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n};\n\nBuffer.prototype.toJSON = function toJSON() {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  };\n};\n\nfunction base64Slice(buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf);\n  } else {\n    return base64.fromByteArray(buf.slice(start, end));\n  }\n}\n\nfunction utf8Slice(buf, start, end) {\n  end = Math.min(buf.length, end);\n  var res = [];\n  var i = start;\n\n  while (i < end) {\n    var firstByte = buf[i];\n    var codePoint = null;\n    var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte;\n          }\n\n          break;\n\n        case 2:\n          secondByte = buf[i + 1];\n\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n          break;\n\n        case 3:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n          break;\n\n        case 4:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          fourthByte = buf[i + 3];\n\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;\n\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD;\n      bytesPerSequence = 1;\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000;\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n      codePoint = 0xDC00 | codePoint & 0x3FF;\n    }\n\n    res.push(codePoint);\n    i += bytesPerSequence;\n  }\n\n  return decodeCodePointsArray(res);\n} // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\n\n\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray(codePoints) {\n  var len = codePoints.length;\n\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n  } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n  var res = '';\n  var i = 0;\n\n  while (i < len) {\n    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n  }\n\n  return res;\n}\n\nfunction asciiSlice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F);\n  }\n\n  return ret;\n}\n\nfunction latin1Slice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i]);\n  }\n\n  return ret;\n}\n\nfunction hexSlice(buf, start, end) {\n  var len = buf.length;\n  if (!start || start < 0) start = 0;\n  if (!end || end < 0 || end > len) end = len;\n  var out = '';\n\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i]);\n  }\n\n  return out;\n}\n\nfunction utf16leSlice(buf, start, end) {\n  var bytes = buf.slice(start, end);\n  var res = '';\n\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n  }\n\n  return res;\n}\n\nBuffer.prototype.slice = function slice(start, end) {\n  var len = this.length;\n  start = ~~start;\n  end = end === undefined ? len : ~~end;\n\n  if (start < 0) {\n    start += len;\n    if (start < 0) start = 0;\n  } else if (start > len) {\n    start = len;\n  }\n\n  if (end < 0) {\n    end += len;\n    if (end < 0) end = 0;\n  } else if (end > len) {\n    end = len;\n  }\n\n  if (end < start) end = start;\n  var newBuf;\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end);\n    newBuf.__proto__ = Buffer.prototype;\n  } else {\n    var sliceLen = end - start;\n    newBuf = new Buffer(sliceLen, undefined);\n\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start];\n    }\n  }\n\n  return newBuf;\n};\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\nfunction checkOffset(offset, ext, length) {\n  if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  return val;\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length);\n  }\n\n  var val = this[offset + --byteLength];\n  var mul = 1;\n\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul;\n  }\n\n  return val;\n};\n\nBuffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  return this[offset];\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] | this[offset + 1] << 8;\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] << 8 | this[offset + 1];\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n};\n\nBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\n\nBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var i = byteLength;\n  var mul = 1;\n  var val = this[offset + --i];\n\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul;\n  }\n\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\n\nBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  if (!(this[offset] & 0x80)) return this[offset];\n  return (0xff - this[offset] + 1) * -1;\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset] | this[offset + 1] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset + 1] | this[offset] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, true, 23, 4);\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, false, 23, 4);\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, true, 52, 8);\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, false, 52, 8);\n};\n\nfunction checkInt(buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance');\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds');\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var mul = 1;\n  var i = 0;\n  this[offset] = value & 0xFF;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  this[offset + i] = value & 0xFF;\n\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\n\nfunction objectWriteUInt16(buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1;\n\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 8;\n    this[offset + 1] = value & 0xff;\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n\n  return offset + 2;\n};\n\nfunction objectWriteUInt32(buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1;\n\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = value >>> 24;\n    this[offset + 2] = value >>> 16;\n    this[offset + 1] = value >>> 8;\n    this[offset] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 24;\n    this[offset + 1] = value >>> 16;\n    this[offset + 2] = value >>> 8;\n    this[offset + 3] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = 0;\n  var mul = 1;\n  var sub = 0;\n  this[offset] = value & 0xFF;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1;\n    }\n\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  var sub = 0;\n  this[offset + i] = value & 0xFF;\n\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1;\n    }\n\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  if (value < 0) value = 0xff + value + 1;\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 8;\n    this[offset + 1] = value & 0xff;\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n    this[offset + 2] = value >>> 16;\n    this[offset + 3] = value >>> 24;\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (value < 0) value = 0xffffffff + value + 1;\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 24;\n    this[offset + 1] = value >>> 16;\n    this[offset + 2] = value >>> 8;\n    this[offset + 3] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n\n  return offset + 4;\n};\n\nfunction checkIEEE754(buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n  if (offset < 0) throw new RangeError('Index out of range');\n}\n\nfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n  }\n\n  ieee754.write(buf, value, offset, littleEndian, 23, 4);\n  return offset + 4;\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert);\n};\n\nfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n  }\n\n  ieee754.write(buf, value, offset, littleEndian, 52, 8);\n  return offset + 8;\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert);\n}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\nBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n  if (!start) start = 0;\n  if (!end && end !== 0) end = this.length;\n  if (targetStart >= target.length) targetStart = target.length;\n  if (!targetStart) targetStart = 0;\n  if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done\n\n  if (end === start) return 0;\n  if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds');\n  }\n\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');\n  if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?\n\n  if (end > this.length) end = this.length;\n\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start;\n  }\n\n  var len = end - start;\n  var i;\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else {\n    Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);\n  }\n\n  return len;\n}; // Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\n\n\nBuffer.prototype.fill = function fill(val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start;\n      start = 0;\n      end = this.length;\n    } else if (typeof end === 'string') {\n      encoding = end;\n      end = this.length;\n    }\n\n    if (val.length === 1) {\n      var code = val.charCodeAt(0);\n\n      if (code < 256) {\n        val = code;\n      }\n    }\n\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string');\n    }\n\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding);\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255;\n  } // Invalid ranges are not set to a default, so can range check early.\n\n\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index');\n  }\n\n  if (end <= start) {\n    return this;\n  }\n\n  start = start >>> 0;\n  end = end === undefined ? this.length : end >>> 0;\n  if (!val) val = 0;\n  var i;\n\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val;\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());\n    var len = bytes.length;\n\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len];\n    }\n  }\n\n  return this;\n}; // HELPER FUNCTIONS\n// ================\n\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean(str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''\n\n  if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n  while (str.length % 4 !== 0) {\n    str = str + '=';\n  }\n\n  return str;\n}\n\nfunction stringtrim(str) {\n  if (str.trim) return str.trim();\n  return str.replace(/^\\s+|\\s+$/g, '');\n}\n\nfunction toHex(n) {\n  if (n < 16) return '0' + n.toString(16);\n  return n.toString(16);\n}\n\nfunction utf8ToBytes(string, units) {\n  units = units || Infinity;\n  var codePoint;\n  var length = string.length;\n  var leadSurrogate = null;\n  var bytes = [];\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i); // is surrogate component\n\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        } // valid lead\n\n\n        leadSurrogate = codePoint;\n        continue;\n      } // 2 leads in a row\n\n\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n        leadSurrogate = codePoint;\n        continue;\n      } // valid surrogate pair\n\n\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n    }\n\n    leadSurrogate = null; // encode utf8\n\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break;\n      bytes.push(codePoint);\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break;\n      bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break;\n      bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break;\n      bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else {\n      throw new Error('Invalid code point');\n    }\n  }\n\n  return bytes;\n}\n\nfunction asciiToBytes(str) {\n  var byteArray = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF);\n  }\n\n  return byteArray;\n}\n\nfunction utf16leToBytes(str, units) {\n  var c, hi, lo;\n  var byteArray = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break;\n    c = str.charCodeAt(i);\n    hi = c >> 8;\n    lo = c % 256;\n    byteArray.push(lo);\n    byteArray.push(hi);\n  }\n\n  return byteArray;\n}\n\nfunction base64ToBytes(str) {\n  return base64.toByteArray(base64clean(str));\n}\n\nfunction blitBuffer(src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if (i + offset >= dst.length || i >= src.length) break;\n    dst[i + offset] = src[i];\n  }\n\n  return i;\n}\n\nfunction isnan(val) {\n  return val !== val; // eslint-disable-line no-self-compare\n}","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/buffer/index.js"],"names":["base64","require","ieee754","isArray","exports","Buffer","SlowBuffer","INSPECT_MAX_BYTES","TYPED_ARRAY_SUPPORT","global","undefined","typedArraySupport","kMaxLength","arr","Uint8Array","__proto__","prototype","foo","subarray","byteLength","e","createBuffer","that","length","RangeError","arg","encodingOrOffset","Error","allocUnsafe","from","poolSize","_augment","value","TypeError","ArrayBuffer","fromArrayBuffer","fromString","fromObject","Symbol","species","Object","defineProperty","configurable","assertSize","size","alloc","fill","encoding","checked","i","allocUnsafeSlow","string","isEncoding","actual","write","slice","fromArrayLike","array","byteOffset","obj","isBuffer","len","copy","buffer","isnan","type","data","toString","b","_isBuffer","compare","a","x","y","Math","min","String","toLowerCase","concat","list","pos","buf","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","swap16","swap32","swap64","arguments","apply","equals","inspect","str","max","match","join","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","isNaN","arrayIndexOf","indexOf","call","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","j","includes","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","Array","_arr","fromByteArray","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","push","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","fromCharCode","ret","out","toHex","bytes","newBuf","sliceLen","checkOffset","ext","readUIntLE","noAssert","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","floor","objectWriteUInt16","littleEndian","writeUInt16LE","writeUInt16BE","objectWriteUInt32","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","checkIEEE754","writeFloat","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","set","code","charCodeAt","INVALID_BASE64_RE","base64clean","stringtrim","replace","trim","units","Infinity","leadSurrogate","byteArray","c","hi","lo","toByteArray","src","dst"],"mappings":"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","sourcesContent":["/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n"]},"metadata":{},"sourceType":"script"}