PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/borc/dist
Просмотр файла: index.js
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["Borc"] = factory();
else
root["Borc"] = factory();
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 11);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(global) {/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <http://feross.org>
* @license MIT
*/
/* eslint-disable no-proto */
var base64 = __webpack_require__(14);
var ieee754 = __webpack_require__(5);
var isArray = __webpack_require__(15);
exports.Buffer = Buffer;
exports.SlowBuffer = SlowBuffer;
exports.INSPECT_MAX_BYTES = 50;
/**
* If `Buffer.TYPED_ARRAY_SUPPORT`:
* === true Use Uint8Array implementation (fastest)
* === false Use Object implementation (most compatible, even IE6)
*
* Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
* Opera 11.6+, iOS 4.2+.
*
* Due to various browser bugs, sometimes the Object implementation will be used even
* when the browser supports typed arrays.
*
* Note:
*
* - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
* See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
*
* - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
*
* - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
* incorrect length in some situations.
* We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
* get the Object implementation, which is slower but behaves correctly.
*/
Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();
/*
* Export kMaxLength after typed array support is determined.
*/
exports.kMaxLength = kMaxLength();
function typedArraySupport() {
try {
var arr = new Uint8Array(1);
arr.__proto__ = {
__proto__: Uint8Array.prototype,
foo: function foo() {
return 42;
}
};
return arr.foo() === 42 && // typed array instances can be augmented
typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`
} catch (e) {
return false;
}
}
function kMaxLength() {
return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;
}
function createBuffer(that, length) {
if (kMaxLength() < length) {
throw new RangeError('Invalid typed array length');
}
if (Buffer.TYPED_ARRAY_SUPPORT) {
// Return an augmented `Uint8Array` instance, for best performance
that = new Uint8Array(length);
that.__proto__ = Buffer.prototype;
} else {
// Fallback: Return an object instance of the Buffer class
if (that === null) {
that = new Buffer(length);
}
that.length = length;
}
return that;
}
/**
* The Buffer constructor returns instances of `Uint8Array` that have their
* prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
* `Uint8Array`, so the returned instances will have all the node `Buffer` methods
* and the `Uint8Array` methods. Square bracket notation works as expected -- it
* returns a single octet.
*
* The `Uint8Array` prototype remains unmodified.
*/
function Buffer(arg, encodingOrOffset, length) {
if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
return new Buffer(arg, encodingOrOffset, length);
} // Common case.
if (typeof arg === 'number') {
if (typeof encodingOrOffset === 'string') {
throw new Error('If encoding is specified then the first argument must be a string');
}
return allocUnsafe(this, arg);
}
return from(this, arg, encodingOrOffset, length);
}
Buffer.poolSize = 8192; // not used by this implementation
// TODO: Legacy, not needed anymore. Remove in next major version.
Buffer._augment = function (arr) {
arr.__proto__ = Buffer.prototype;
return arr;
};
function from(that, value, encodingOrOffset, length) {
if (typeof value === 'number') {
throw new TypeError('"value" argument must not be a number');
}
if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
return fromArrayBuffer(that, value, encodingOrOffset, length);
}
if (typeof value === 'string') {
return fromString(that, value, encodingOrOffset);
}
return fromObject(that, value);
}
/**
* Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
* if value is a number.
* Buffer.from(str[, encoding])
* Buffer.from(array)
* Buffer.from(buffer)
* Buffer.from(arrayBuffer[, byteOffset[, length]])
**/
Buffer.from = function (value, encodingOrOffset, length) {
return from(null, value, encodingOrOffset, length);
};
if (Buffer.TYPED_ARRAY_SUPPORT) {
Buffer.prototype.__proto__ = Uint8Array.prototype;
Buffer.__proto__ = Uint8Array;
if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {
// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
Object.defineProperty(Buffer, Symbol.species, {
value: null,
configurable: true
});
}
}
function assertSize(size) {
if (typeof size !== 'number') {
throw new TypeError('"size" argument must be a number');
} else if (size < 0) {
throw new RangeError('"size" argument must not be negative');
}
}
function alloc(that, size, fill, encoding) {
assertSize(size);
if (size <= 0) {
return createBuffer(that, size);
}
if (fill !== undefined) {
// Only pay attention to encoding if it's a string. This
// prevents accidentally sending in a number that would
// be interpretted as a start offset.
return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);
}
return createBuffer(that, size);
}
/**
* Creates a new filled Buffer instance.
* alloc(size[, fill[, encoding]])
**/
Buffer.alloc = function (size, fill, encoding) {
return alloc(null, size, fill, encoding);
};
function allocUnsafe(that, size) {
assertSize(size);
that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);
if (!Buffer.TYPED_ARRAY_SUPPORT) {
for (var i = 0; i < size; ++i) {
that[i] = 0;
}
}
return that;
}
/**
* Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
* */
Buffer.allocUnsafe = function (size) {
return allocUnsafe(null, size);
};
/**
* Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
*/
Buffer.allocUnsafeSlow = function (size) {
return allocUnsafe(null, size);
};
function fromString(that, string, encoding) {
if (typeof encoding !== 'string' || encoding === '') {
encoding = 'utf8';
}
if (!Buffer.isEncoding(encoding)) {
throw new TypeError('"encoding" must be a valid string encoding');
}
var length = byteLength(string, encoding) | 0;
that = createBuffer(that, length);
var actual = that.write(string, encoding);
if (actual !== length) {
// Writing a hex string, for example, that contains invalid characters will
// cause everything after the first invalid character to be ignored. (e.g.
// 'abxxcd' will be treated as 'ab')
that = that.slice(0, actual);
}
return that;
}
function fromArrayLike(that, array) {
var length = array.length < 0 ? 0 : checked(array.length) | 0;
that = createBuffer(that, length);
for (var i = 0; i < length; i += 1) {
that[i] = array[i] & 255;
}
return that;
}
function fromArrayBuffer(that, array, byteOffset, length) {
array.byteLength; // this throws if `array` is not a valid ArrayBuffer
if (byteOffset < 0 || array.byteLength < byteOffset) {
throw new RangeError('\'offset\' is out of bounds');
}
if (array.byteLength < byteOffset + (length || 0)) {
throw new RangeError('\'length\' is out of bounds');
}
if (byteOffset === undefined && length === undefined) {
array = new Uint8Array(array);
} else if (length === undefined) {
array = new Uint8Array(array, byteOffset);
} else {
array = new Uint8Array(array, byteOffset, length);
}
if (Buffer.TYPED_ARRAY_SUPPORT) {
// Return an augmented `Uint8Array` instance, for best performance
that = array;
that.__proto__ = Buffer.prototype;
} else {
// Fallback: Return an object instance of the Buffer class
that = fromArrayLike(that, array);
}
return that;
}
function fromObject(that, obj) {
if (Buffer.isBuffer(obj)) {
var len = checked(obj.length) | 0;
that = createBuffer(that, len);
if (that.length === 0) {
return that;
}
obj.copy(that, 0, 0, len);
return that;
}
if (obj) {
if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {
if (typeof obj.length !== 'number' || isnan(obj.length)) {
return createBuffer(that, 0);
}
return fromArrayLike(that, obj);
}
if (obj.type === 'Buffer' && isArray(obj.data)) {
return fromArrayLike(that, obj.data);
}
}
throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');
}
function checked(length) {
// Note: cannot use `length < kMaxLength()` here because that fails when
// length is NaN (which is otherwise coerced to zero.)
if (length >= kMaxLength()) {
throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');
}
return length | 0;
}
function SlowBuffer(length) {
if (+length != length) {
// eslint-disable-line eqeqeq
length = 0;
}
return Buffer.alloc(+length);
}
Buffer.isBuffer = function isBuffer(b) {
return !!(b != null && b._isBuffer);
};
Buffer.compare = function compare(a, b) {
if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
throw new TypeError('Arguments must be Buffers');
}
if (a === b) return 0;
var x = a.length;
var y = b.length;
for (var i = 0, len = Math.min(x, y); i < len; ++i) {
if (a[i] !== b[i]) {
x = a[i];
y = b[i];
break;
}
}
if (x < y) return -1;
if (y < x) return 1;
return 0;
};
Buffer.isEncoding = function isEncoding(encoding) {
switch (String(encoding).toLowerCase()) {
case 'hex':
case 'utf8':
case 'utf-8':
case 'ascii':
case 'latin1':
case 'binary':
case 'base64':
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return true;
default:
return false;
}
};
Buffer.concat = function concat(list, length) {
if (!isArray(list)) {
throw new TypeError('"list" argument must be an Array of Buffers');
}
if (list.length === 0) {
return Buffer.alloc(0);
}
var i;
if (length === undefined) {
length = 0;
for (i = 0; i < list.length; ++i) {
length += list[i].length;
}
}
var buffer = Buffer.allocUnsafe(length);
var pos = 0;
for (i = 0; i < list.length; ++i) {
var buf = list[i];
if (!Buffer.isBuffer(buf)) {
throw new TypeError('"list" argument must be an Array of Buffers');
}
buf.copy(buffer, pos);
pos += buf.length;
}
return buffer;
};
function byteLength(string, encoding) {
if (Buffer.isBuffer(string)) {
return string.length;
}
if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
return string.byteLength;
}
if (typeof string !== 'string') {
string = '' + string;
}
var len = string.length;
if (len === 0) return 0; // Use a for loop to avoid recursion
var loweredCase = false;
for (;;) {
switch (encoding) {
case 'ascii':
case 'latin1':
case 'binary':
return len;
case 'utf8':
case 'utf-8':
case undefined:
return utf8ToBytes(string).length;
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return len * 2;
case 'hex':
return len >>> 1;
case 'base64':
return base64ToBytes(string).length;
default:
if (loweredCase) return utf8ToBytes(string).length; // assume utf8
encoding = ('' + encoding).toLowerCase();
loweredCase = true;
}
}
}
Buffer.byteLength = byteLength;
function slowToString(encoding, start, end) {
var loweredCase = false; // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
// property of a typed array.
// This behaves neither like String nor Uint8Array in that we set start/end
// to their upper/lower bounds if the value passed is out of range.
// undefined is handled specially as per ECMA-262 6th Edition,
// Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
if (start === undefined || start < 0) {
start = 0;
} // Return early if start > this.length. Done here to prevent potential uint32
// coercion fail below.
if (start > this.length) {
return '';
}
if (end === undefined || end > this.length) {
end = this.length;
}
if (end <= 0) {
return '';
} // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
end >>>= 0;
start >>>= 0;
if (end <= start) {
return '';
}
if (!encoding) encoding = 'utf8';
while (true) {
switch (encoding) {
case 'hex':
return hexSlice(this, start, end);
case 'utf8':
case 'utf-8':
return utf8Slice(this, start, end);
case 'ascii':
return asciiSlice(this, start, end);
case 'latin1':
case 'binary':
return latin1Slice(this, start, end);
case 'base64':
return base64Slice(this, start, end);
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return utf16leSlice(this, start, end);
default:
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
encoding = (encoding + '').toLowerCase();
loweredCase = true;
}
}
} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
// Buffer instances.
Buffer.prototype._isBuffer = true;
function swap(b, n, m) {
var i = b[n];
b[n] = b[m];
b[m] = i;
}
Buffer.prototype.swap16 = function swap16() {
var len = this.length;
if (len % 2 !== 0) {
throw new RangeError('Buffer size must be a multiple of 16-bits');
}
for (var i = 0; i < len; i += 2) {
swap(this, i, i + 1);
}
return this;
};
Buffer.prototype.swap32 = function swap32() {
var len = this.length;
if (len % 4 !== 0) {
throw new RangeError('Buffer size must be a multiple of 32-bits');
}
for (var i = 0; i < len; i += 4) {
swap(this, i, i + 3);
swap(this, i + 1, i + 2);
}
return this;
};
Buffer.prototype.swap64 = function swap64() {
var len = this.length;
if (len % 8 !== 0) {
throw new RangeError('Buffer size must be a multiple of 64-bits');
}
for (var i = 0; i < len; i += 8) {
swap(this, i, i + 7);
swap(this, i + 1, i + 6);
swap(this, i + 2, i + 5);
swap(this, i + 3, i + 4);
}
return this;
};
Buffer.prototype.toString = function toString() {
var length = this.length | 0;
if (length === 0) return '';
if (arguments.length === 0) return utf8Slice(this, 0, length);
return slowToString.apply(this, arguments);
};
Buffer.prototype.equals = function equals(b) {
if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');
if (this === b) return true;
return Buffer.compare(this, b) === 0;
};
Buffer.prototype.inspect = function inspect() {
var str = '';
var max = exports.INSPECT_MAX_BYTES;
if (this.length > 0) {
str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');
if (this.length > max) str += ' ... ';
}
return '<Buffer ' + str + '>';
};
Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {
if (!Buffer.isBuffer(target)) {
throw new TypeError('Argument must be a Buffer');
}
if (start === undefined) {
start = 0;
}
if (end === undefined) {
end = target ? target.length : 0;
}
if (thisStart === undefined) {
thisStart = 0;
}
if (thisEnd === undefined) {
thisEnd = this.length;
}
if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
throw new RangeError('out of range index');
}
if (thisStart >= thisEnd && start >= end) {
return 0;
}
if (thisStart >= thisEnd) {
return -1;
}
if (start >= end) {
return 1;
}
start >>>= 0;
end >>>= 0;
thisStart >>>= 0;
thisEnd >>>= 0;
if (this === target) return 0;
var x = thisEnd - thisStart;
var y = end - start;
var len = Math.min(x, y);
var thisCopy = this.slice(thisStart, thisEnd);
var targetCopy = target.slice(start, end);
for (var i = 0; i < len; ++i) {
if (thisCopy[i] !== targetCopy[i]) {
x = thisCopy[i];
y = targetCopy[i];
break;
}
}
if (x < y) return -1;
if (y < x) return 1;
return 0;
}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf
function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {
// Empty buffer means no match
if (buffer.length === 0) return -1; // Normalize byteOffset
if (typeof byteOffset === 'string') {
encoding = byteOffset;
byteOffset = 0;
} else if (byteOffset > 0x7fffffff) {
byteOffset = 0x7fffffff;
} else if (byteOffset < -0x80000000) {
byteOffset = -0x80000000;
}
byteOffset = +byteOffset; // Coerce to Number.
if (isNaN(byteOffset)) {
// byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
byteOffset = dir ? 0 : buffer.length - 1;
} // Normalize byteOffset: negative offsets start from the end of the buffer
if (byteOffset < 0) byteOffset = buffer.length + byteOffset;
if (byteOffset >= buffer.length) {
if (dir) return -1;else byteOffset = buffer.length - 1;
} else if (byteOffset < 0) {
if (dir) byteOffset = 0;else return -1;
} // Normalize val
if (typeof val === 'string') {
val = Buffer.from(val, encoding);
} // Finally, search either indexOf (if dir is true) or lastIndexOf
if (Buffer.isBuffer(val)) {
// Special case: looking for empty string/buffer always fails
if (val.length === 0) {
return -1;
}
return arrayIndexOf(buffer, val, byteOffset, encoding, dir);
} else if (typeof val === 'number') {
val = val & 0xFF; // Search for a byte value [0-255]
if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {
if (dir) {
return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);
} else {
return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);
}
}
return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);
}
throw new TypeError('val must be string, number or Buffer');
}
function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
var indexSize = 1;
var arrLength = arr.length;
var valLength = val.length;
if (encoding !== undefined) {
encoding = String(encoding).toLowerCase();
if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {
if (arr.length < 2 || val.length < 2) {
return -1;
}
indexSize = 2;
arrLength /= 2;
valLength /= 2;
byteOffset /= 2;
}
}
function read(buf, i) {
if (indexSize === 1) {
return buf[i];
} else {
return buf.readUInt16BE(i * indexSize);
}
}
var i;
if (dir) {
var foundIndex = -1;
for (i = byteOffset; i < arrLength; i++) {
if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
if (foundIndex === -1) foundIndex = i;
if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;
} else {
if (foundIndex !== -1) i -= i - foundIndex;
foundIndex = -1;
}
}
} else {
if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;
for (i = byteOffset; i >= 0; i--) {
var found = true;
for (var j = 0; j < valLength; j++) {
if (read(arr, i + j) !== read(val, j)) {
found = false;
break;
}
}
if (found) return i;
}
}
return -1;
}
Buffer.prototype.includes = function includes(val, byteOffset, encoding) {
return this.indexOf(val, byteOffset, encoding) !== -1;
};
Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {
return bidirectionalIndexOf(this, val, byteOffset, encoding, true);
};
Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {
return bidirectionalIndexOf(this, val, byteOffset, encoding, false);
};
function hexWrite(buf, string, offset, length) {
offset = Number(offset) || 0;
var remaining = buf.length - offset;
if (!length) {
length = remaining;
} else {
length = Number(length);
if (length > remaining) {
length = remaining;
}
} // must be an even number of digits
var strLen = string.length;
if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');
if (length > strLen / 2) {
length = strLen / 2;
}
for (var i = 0; i < length; ++i) {
var parsed = parseInt(string.substr(i * 2, 2), 16);
if (isNaN(parsed)) return i;
buf[offset + i] = parsed;
}
return i;
}
function utf8Write(buf, string, offset, length) {
return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);
}
function asciiWrite(buf, string, offset, length) {
return blitBuffer(asciiToBytes(string), buf, offset, length);
}
function latin1Write(buf, string, offset, length) {
return asciiWrite(buf, string, offset, length);
}
function base64Write(buf, string, offset, length) {
return blitBuffer(base64ToBytes(string), buf, offset, length);
}
function ucs2Write(buf, string, offset, length) {
return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);
}
Buffer.prototype.write = function write(string, offset, length, encoding) {
// Buffer#write(string)
if (offset === undefined) {
encoding = 'utf8';
length = this.length;
offset = 0; // Buffer#write(string, encoding)
} else if (length === undefined && typeof offset === 'string') {
encoding = offset;
length = this.length;
offset = 0; // Buffer#write(string, offset[, length][, encoding])
} else if (isFinite(offset)) {
offset = offset | 0;
if (isFinite(length)) {
length = length | 0;
if (encoding === undefined) encoding = 'utf8';
} else {
encoding = length;
length = undefined;
} // legacy write(string, encoding, offset, length) - remove in v0.13
} else {
throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');
}
var remaining = this.length - offset;
if (length === undefined || length > remaining) length = remaining;
if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {
throw new RangeError('Attempt to write outside buffer bounds');
}
if (!encoding) encoding = 'utf8';
var loweredCase = false;
for (;;) {
switch (encoding) {
case 'hex':
return hexWrite(this, string, offset, length);
case 'utf8':
case 'utf-8':
return utf8Write(this, string, offset, length);
case 'ascii':
return asciiWrite(this, string, offset, length);
case 'latin1':
case 'binary':
return latin1Write(this, string, offset, length);
case 'base64':
// Warning: maxLength not taken into account in base64Write
return base64Write(this, string, offset, length);
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
return ucs2Write(this, string, offset, length);
default:
if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);
encoding = ('' + encoding).toLowerCase();
loweredCase = true;
}
}
};
Buffer.prototype.toJSON = function toJSON() {
return {
type: 'Buffer',
data: Array.prototype.slice.call(this._arr || this, 0)
};
};
function base64Slice(buf, start, end) {
if (start === 0 && end === buf.length) {
return base64.fromByteArray(buf);
} else {
return base64.fromByteArray(buf.slice(start, end));
}
}
function utf8Slice(buf, start, end) {
end = Math.min(buf.length, end);
var res = [];
var i = start;
while (i < end) {
var firstByte = buf[i];
var codePoint = null;
var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;
if (i + bytesPerSequence <= end) {
var secondByte, thirdByte, fourthByte, tempCodePoint;
switch (bytesPerSequence) {
case 1:
if (firstByte < 0x80) {
codePoint = firstByte;
}
break;
case 2:
secondByte = buf[i + 1];
if ((secondByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;
if (tempCodePoint > 0x7F) {
codePoint = tempCodePoint;
}
}
break;
case 3:
secondByte = buf[i + 1];
thirdByte = buf[i + 2];
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;
if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
codePoint = tempCodePoint;
}
}
break;
case 4:
secondByte = buf[i + 1];
thirdByte = buf[i + 2];
fourthByte = buf[i + 3];
if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;
if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
codePoint = tempCodePoint;
}
}
}
}
if (codePoint === null) {
// we did not generate a valid codePoint so insert a
// replacement char (U+FFFD) and advance only 1 byte
codePoint = 0xFFFD;
bytesPerSequence = 1;
} else if (codePoint > 0xFFFF) {
// encode to utf16 (surrogate pair dance)
codePoint -= 0x10000;
res.push(codePoint >>> 10 & 0x3FF | 0xD800);
codePoint = 0xDC00 | codePoint & 0x3FF;
}
res.push(codePoint);
i += bytesPerSequence;
}
return decodeCodePointsArray(res);
} // Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety
var MAX_ARGUMENTS_LENGTH = 0x1000;
function decodeCodePointsArray(codePoints) {
var len = codePoints.length;
if (len <= MAX_ARGUMENTS_LENGTH) {
return String.fromCharCode.apply(String, codePoints); // avoid extra slice()
} // Decode in chunks to avoid "call stack size exceeded".
var res = '';
var i = 0;
while (i < len) {
res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));
}
return res;
}
function asciiSlice(buf, start, end) {
var ret = '';
end = Math.min(buf.length, end);
for (var i = start; i < end; ++i) {
ret += String.fromCharCode(buf[i] & 0x7F);
}
return ret;
}
function latin1Slice(buf, start, end) {
var ret = '';
end = Math.min(buf.length, end);
for (var i = start; i < end; ++i) {
ret += String.fromCharCode(buf[i]);
}
return ret;
}
function hexSlice(buf, start, end) {
var len = buf.length;
if (!start || start < 0) start = 0;
if (!end || end < 0 || end > len) end = len;
var out = '';
for (var i = start; i < end; ++i) {
out += toHex(buf[i]);
}
return out;
}
function utf16leSlice(buf, start, end) {
var bytes = buf.slice(start, end);
var res = '';
for (var i = 0; i < bytes.length; i += 2) {
res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);
}
return res;
}
Buffer.prototype.slice = function slice(start, end) {
var len = this.length;
start = ~~start;
end = end === undefined ? len : ~~end;
if (start < 0) {
start += len;
if (start < 0) start = 0;
} else if (start > len) {
start = len;
}
if (end < 0) {
end += len;
if (end < 0) end = 0;
} else if (end > len) {
end = len;
}
if (end < start) end = start;
var newBuf;
if (Buffer.TYPED_ARRAY_SUPPORT) {
newBuf = this.subarray(start, end);
newBuf.__proto__ = Buffer.prototype;
} else {
var sliceLen = end - start;
newBuf = new Buffer(sliceLen, undefined);
for (var i = 0; i < sliceLen; ++i) {
newBuf[i] = this[i + start];
}
}
return newBuf;
};
/*
* Need to make sure that buffer isn't trying to write out of bounds.
*/
function checkOffset(offset, ext, length) {
if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');
if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');
}
Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {
offset = offset | 0;
byteLength = byteLength | 0;
if (!noAssert) checkOffset(offset, byteLength, this.length);
var val = this[offset];
var mul = 1;
var i = 0;
while (++i < byteLength && (mul *= 0x100)) {
val += this[offset + i] * mul;
}
return val;
};
Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {
offset = offset | 0;
byteLength = byteLength | 0;
if (!noAssert) {
checkOffset(offset, byteLength, this.length);
}
var val = this[offset + --byteLength];
var mul = 1;
while (byteLength > 0 && (mul *= 0x100)) {
val += this[offset + --byteLength] * mul;
}
return val;
};
Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {
if (!noAssert) checkOffset(offset, 1, this.length);
return this[offset];
};
Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length);
return this[offset] | this[offset + 1] << 8;
};
Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length);
return this[offset] << 8 | this[offset + 1];
};
Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length);
return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;
};
Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length);
return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);
};
Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {
offset = offset | 0;
byteLength = byteLength | 0;
if (!noAssert) checkOffset(offset, byteLength, this.length);
var val = this[offset];
var mul = 1;
var i = 0;
while (++i < byteLength && (mul *= 0x100)) {
val += this[offset + i] * mul;
}
mul *= 0x80;
if (val >= mul) val -= Math.pow(2, 8 * byteLength);
return val;
};
Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {
offset = offset | 0;
byteLength = byteLength | 0;
if (!noAssert) checkOffset(offset, byteLength, this.length);
var i = byteLength;
var mul = 1;
var val = this[offset + --i];
while (i > 0 && (mul *= 0x100)) {
val += this[offset + --i] * mul;
}
mul *= 0x80;
if (val >= mul) val -= Math.pow(2, 8 * byteLength);
return val;
};
Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {
if (!noAssert) checkOffset(offset, 1, this.length);
if (!(this[offset] & 0x80)) return this[offset];
return (0xff - this[offset] + 1) * -1;
};
Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length);
var val = this[offset] | this[offset + 1] << 8;
return val & 0x8000 ? val | 0xFFFF0000 : val;
};
Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 2, this.length);
var val = this[offset + 1] | this[offset] << 8;
return val & 0x8000 ? val | 0xFFFF0000 : val;
};
Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length);
return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;
};
Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length);
return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];
};
Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length);
return ieee754.read(this, offset, true, 23, 4);
};
Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 4, this.length);
return ieee754.read(this, offset, false, 23, 4);
};
Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 8, this.length);
return ieee754.read(this, offset, true, 52, 8);
};
Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {
if (!noAssert) checkOffset(offset, 8, this.length);
return ieee754.read(this, offset, false, 52, 8);
};
function checkInt(buf, value, offset, ext, max, min) {
if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance');
if (value > max || value < min) throw new RangeError('"value" argument is out of bounds');
if (offset + ext > buf.length) throw new RangeError('Index out of range');
}
Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {
value = +value;
offset = offset | 0;
byteLength = byteLength | 0;
if (!noAssert) {
var maxBytes = Math.pow(2, 8 * byteLength) - 1;
checkInt(this, value, offset, byteLength, maxBytes, 0);
}
var mul = 1;
var i = 0;
this[offset] = value & 0xFF;
while (++i < byteLength && (mul *= 0x100)) {
this[offset + i] = value / mul & 0xFF;
}
return offset + byteLength;
};
Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {
value = +value;
offset = offset | 0;
byteLength = byteLength | 0;
if (!noAssert) {
var maxBytes = Math.pow(2, 8 * byteLength) - 1;
checkInt(this, value, offset, byteLength, maxBytes, 0);
}
var i = byteLength - 1;
var mul = 1;
this[offset + i] = value & 0xFF;
while (--i >= 0 && (mul *= 0x100)) {
this[offset + i] = value / mul & 0xFF;
}
return offset + byteLength;
};
Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
this[offset] = value & 0xff;
return offset + 1;
};
function objectWriteUInt16(buf, value, offset, littleEndian) {
if (value < 0) value = 0xffff + value + 1;
for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;
}
}
Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = value & 0xff;
this[offset + 1] = value >>> 8;
} else {
objectWriteUInt16(this, value, offset, true);
}
return offset + 2;
};
Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = value >>> 8;
this[offset + 1] = value & 0xff;
} else {
objectWriteUInt16(this, value, offset, false);
}
return offset + 2;
};
function objectWriteUInt32(buf, value, offset, littleEndian) {
if (value < 0) value = 0xffffffff + value + 1;
for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;
}
}
Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset + 3] = value >>> 24;
this[offset + 2] = value >>> 16;
this[offset + 1] = value >>> 8;
this[offset] = value & 0xff;
} else {
objectWriteUInt32(this, value, offset, true);
}
return offset + 4;
};
Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = value >>> 24;
this[offset + 1] = value >>> 16;
this[offset + 2] = value >>> 8;
this[offset + 3] = value & 0xff;
} else {
objectWriteUInt32(this, value, offset, false);
}
return offset + 4;
};
Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) {
var limit = Math.pow(2, 8 * byteLength - 1);
checkInt(this, value, offset, byteLength, limit - 1, -limit);
}
var i = 0;
var mul = 1;
var sub = 0;
this[offset] = value & 0xFF;
while (++i < byteLength && (mul *= 0x100)) {
if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
sub = 1;
}
this[offset + i] = (value / mul >> 0) - sub & 0xFF;
}
return offset + byteLength;
};
Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) {
var limit = Math.pow(2, 8 * byteLength - 1);
checkInt(this, value, offset, byteLength, limit - 1, -limit);
}
var i = byteLength - 1;
var mul = 1;
var sub = 0;
this[offset + i] = value & 0xFF;
while (--i >= 0 && (mul *= 0x100)) {
if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
sub = 1;
}
this[offset + i] = (value / mul >> 0) - sub & 0xFF;
}
return offset + byteLength;
};
Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);
if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);
if (value < 0) value = 0xff + value + 1;
this[offset] = value & 0xff;
return offset + 1;
};
Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = value & 0xff;
this[offset + 1] = value >>> 8;
} else {
objectWriteUInt16(this, value, offset, true);
}
return offset + 2;
};
Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = value >>> 8;
this[offset + 1] = value & 0xff;
} else {
objectWriteUInt16(this, value, offset, false);
}
return offset + 2;
};
Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = value & 0xff;
this[offset + 1] = value >>> 8;
this[offset + 2] = value >>> 16;
this[offset + 3] = value >>> 24;
} else {
objectWriteUInt32(this, value, offset, true);
}
return offset + 4;
};
Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {
value = +value;
offset = offset | 0;
if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);
if (value < 0) value = 0xffffffff + value + 1;
if (Buffer.TYPED_ARRAY_SUPPORT) {
this[offset] = value >>> 24;
this[offset + 1] = value >>> 16;
this[offset + 2] = value >>> 8;
this[offset + 3] = value & 0xff;
} else {
objectWriteUInt32(this, value, offset, false);
}
return offset + 4;
};
function checkIEEE754(buf, value, offset, ext, max, min) {
if (offset + ext > buf.length) throw new RangeError('Index out of range');
if (offset < 0) throw new RangeError('Index out of range');
}
function writeFloat(buf, value, offset, littleEndian, noAssert) {
if (!noAssert) {
checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);
}
ieee754.write(buf, value, offset, littleEndian, 23, 4);
return offset + 4;
}
Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {
return writeFloat(this, value, offset, true, noAssert);
};
Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {
return writeFloat(this, value, offset, false, noAssert);
};
function writeDouble(buf, value, offset, littleEndian, noAssert) {
if (!noAssert) {
checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);
}
ieee754.write(buf, value, offset, littleEndian, 52, 8);
return offset + 8;
}
Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {
return writeDouble(this, value, offset, true, noAssert);
};
Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {
return writeDouble(this, value, offset, false, noAssert);
}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
Buffer.prototype.copy = function copy(target, targetStart, start, end) {
if (!start) start = 0;
if (!end && end !== 0) end = this.length;
if (targetStart >= target.length) targetStart = target.length;
if (!targetStart) targetStart = 0;
if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done
if (end === start) return 0;
if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions
if (targetStart < 0) {
throw new RangeError('targetStart out of bounds');
}
if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');
if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?
if (end > this.length) end = this.length;
if (target.length - targetStart < end - start) {
end = target.length - targetStart + start;
}
var len = end - start;
var i;
if (this === target && start < targetStart && targetStart < end) {
// descending copy from end
for (i = len - 1; i >= 0; --i) {
target[i + targetStart] = this[i + start];
}
} else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
// ascending copy from start
for (i = 0; i < len; ++i) {
target[i + targetStart] = this[i + start];
}
} else {
Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);
}
return len;
}; // Usage:
// buffer.fill(number[, offset[, end]])
// buffer.fill(buffer[, offset[, end]])
// buffer.fill(string[, offset[, end]][, encoding])
Buffer.prototype.fill = function fill(val, start, end, encoding) {
// Handle string cases:
if (typeof val === 'string') {
if (typeof start === 'string') {
encoding = start;
start = 0;
end = this.length;
} else if (typeof end === 'string') {
encoding = end;
end = this.length;
}
if (val.length === 1) {
var code = val.charCodeAt(0);
if (code < 256) {
val = code;
}
}
if (encoding !== undefined && typeof encoding !== 'string') {
throw new TypeError('encoding must be a string');
}
if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
throw new TypeError('Unknown encoding: ' + encoding);
}
} else if (typeof val === 'number') {
val = val & 255;
} // Invalid ranges are not set to a default, so can range check early.
if (start < 0 || this.length < start || this.length < end) {
throw new RangeError('Out of range index');
}
if (end <= start) {
return this;
}
start = start >>> 0;
end = end === undefined ? this.length : end >>> 0;
if (!val) val = 0;
var i;
if (typeof val === 'number') {
for (i = start; i < end; ++i) {
this[i] = val;
}
} else {
var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());
var len = bytes.length;
for (i = 0; i < end - start; ++i) {
this[i + start] = bytes[i % len];
}
}
return this;
}; // HELPER FUNCTIONS
// ================
var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g;
function base64clean(str) {
// Node strips out invalid characters like \n and \t from the string, base64-js does not
str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''
if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
while (str.length % 4 !== 0) {
str = str + '=';
}
return str;
}
function stringtrim(str) {
if (str.trim) return str.trim();
return str.replace(/^\s+|\s+$/g, '');
}
function toHex(n) {
if (n < 16) return '0' + n.toString(16);
return n.toString(16);
}
function utf8ToBytes(string, units) {
units = units || Infinity;
var codePoint;
var length = string.length;
var leadSurrogate = null;
var bytes = [];
for (var i = 0; i < length; ++i) {
codePoint = string.charCodeAt(i); // is surrogate component
if (codePoint > 0xD7FF && codePoint < 0xE000) {
// last char was a lead
if (!leadSurrogate) {
// no lead yet
if (codePoint > 0xDBFF) {
// unexpected trail
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
continue;
} else if (i + 1 === length) {
// unpaired lead
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
continue;
} // valid lead
leadSurrogate = codePoint;
continue;
} // 2 leads in a row
if (codePoint < 0xDC00) {
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
leadSurrogate = codePoint;
continue;
} // valid surrogate pair
codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;
} else if (leadSurrogate) {
// valid bmp char, but last char was a lead
if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);
}
leadSurrogate = null; // encode utf8
if (codePoint < 0x80) {
if ((units -= 1) < 0) break;
bytes.push(codePoint);
} else if (codePoint < 0x800) {
if ((units -= 2) < 0) break;
bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);
} else if (codePoint < 0x10000) {
if ((units -= 3) < 0) break;
bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
} else if (codePoint < 0x110000) {
if ((units -= 4) < 0) break;
bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);
} else {
throw new Error('Invalid code point');
}
}
return bytes;
}
function asciiToBytes(str) {
var byteArray = [];
for (var i = 0; i < str.length; ++i) {
// Node's code seems to be doing this and not & 0x7F..
byteArray.push(str.charCodeAt(i) & 0xFF);
}
return byteArray;
}
function utf16leToBytes(str, units) {
var c, hi, lo;
var byteArray = [];
for (var i = 0; i < str.length; ++i) {
if ((units -= 2) < 0) break;
c = str.charCodeAt(i);
hi = c >> 8;
lo = c % 256;
byteArray.push(lo);
byteArray.push(hi);
}
return byteArray;
}
function base64ToBytes(str) {
return base64.toByteArray(base64clean(str));
}
function blitBuffer(src, dst, offset, length) {
for (var i = 0; i < length; ++i) {
if (i + offset >= dst.length || i >= src.length) break;
dst[i + offset] = src[i];
}
return i;
}
function isnan(val) {
return val !== val; // eslint-disable-line no-self-compare
}
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(4)))
/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __WEBPACK_AMD_DEFINE_RESULT__;
;
(function (globalObject) {
'use strict';
/*
* bignumber.js v9.0.0
* A JavaScript library for arbitrary-precision arithmetic.
* https://github.com/MikeMcl/bignumber.js
* Copyright (c) 2019 Michael Mclaughlin <M8ch88l@gmail.com>
* MIT Licensed.
*
* BigNumber.prototype methods | BigNumber methods
* |
* absoluteValue abs | clone
* comparedTo | config set
* decimalPlaces dp | DECIMAL_PLACES
* dividedBy div | ROUNDING_MODE
* dividedToIntegerBy idiv | EXPONENTIAL_AT
* exponentiatedBy pow | RANGE
* integerValue | CRYPTO
* isEqualTo eq | MODULO_MODE
* isFinite | POW_PRECISION
* isGreaterThan gt | FORMAT
* isGreaterThanOrEqualTo gte | ALPHABET
* isInteger | isBigNumber
* isLessThan lt | maximum max
* isLessThanOrEqualTo lte | minimum min
* isNaN | random
* isNegative | sum
* isPositive |
* isZero |
* minus |
* modulo mod |
* multipliedBy times |
* negated |
* plus |
* precision sd |
* shiftedBy |
* squareRoot sqrt |
* toExponential |
* toFixed |
* toFormat |
* toFraction |
* toJSON |
* toNumber |
* toPrecision |
* toString |
* valueOf |
*
*/
var BigNumber,
isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,
mathceil = Math.ceil,
mathfloor = Math.floor,
bignumberError = '[BigNumber Error] ',
tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',
BASE = 1e14,
LOG_BASE = 14,
MAX_SAFE_INTEGER = 0x1fffffffffffff,
// 2^53 - 1
// MAX_INT32 = 0x7fffffff, // 2^31 - 1
POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],
SQRT_BASE = 1e7,
// EDITABLE
// The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and
// the arguments to toExponential, toFixed, toFormat, and toPrecision.
MAX = 1E9; // 0 to MAX_INT32
/*
* Create and return a BigNumber constructor.
*/
function clone(configObject) {
var div,
convertBase,
parseNumeric,
P = BigNumber.prototype = {
constructor: BigNumber,
toString: null,
valueOf: null
},
ONE = new BigNumber(1),
//----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------
// The default values below must be integers within the inclusive ranges stated.
// The values can also be changed at run-time using BigNumber.set.
// The maximum number of decimal places for operations involving division.
DECIMAL_PLACES = 20,
// 0 to MAX
// The rounding mode used when rounding to the above decimal places, and when using
// toExponential, toFixed, toFormat and toPrecision, and round (default value).
// UP 0 Away from zero.
// DOWN 1 Towards zero.
// CEIL 2 Towards +Infinity.
// FLOOR 3 Towards -Infinity.
// HALF_UP 4 Towards nearest neighbour. If equidistant, up.
// HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.
// HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.
// HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.
// HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.
ROUNDING_MODE = 4,
// 0 to 8
// EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]
// The exponent value at and beneath which toString returns exponential notation.
// Number type: -7
TO_EXP_NEG = -7,
// 0 to -MAX
// The exponent value at and above which toString returns exponential notation.
// Number type: 21
TO_EXP_POS = 21,
// 0 to MAX
// RANGE : [MIN_EXP, MAX_EXP]
// The minimum exponent value, beneath which underflow to zero occurs.
// Number type: -324 (5e-324)
MIN_EXP = -1e7,
// -1 to -MAX
// The maximum exponent value, above which overflow to Infinity occurs.
// Number type: 308 (1.7976931348623157e+308)
// For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.
MAX_EXP = 1e7,
// 1 to MAX
// Whether to use cryptographically-secure random number generation, if available.
CRYPTO = false,
// true or false
// The modulo mode used when calculating the modulus: a mod n.
// The quotient (q = a / n) is calculated according to the corresponding rounding mode.
// The remainder (r) is calculated as: r = a - n * q.
//
// UP 0 The remainder is positive if the dividend is negative, else is negative.
// DOWN 1 The remainder has the same sign as the dividend.
// This modulo mode is commonly known as 'truncated division' and is
// equivalent to (a % n) in JavaScript.
// FLOOR 3 The remainder has the same sign as the divisor (Python %).
// HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.
// EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).
// The remainder is always positive.
//
// The truncated division, floored division, Euclidian division and IEEE 754 remainder
// modes are commonly used for the modulus operation.
// Although the other rounding modes can also be used, they may not give useful results.
MODULO_MODE = 1,
// 0 to 9
// The maximum number of significant digits of the result of the exponentiatedBy operation.
// If POW_PRECISION is 0, there will be unlimited significant digits.
POW_PRECISION = 0,
// 0 to MAX
// The format specification used by the BigNumber.prototype.toFormat method.
FORMAT = {
prefix: '',
groupSize: 3,
secondaryGroupSize: 0,
groupSeparator: ',',
decimalSeparator: '.',
fractionGroupSize: 0,
fractionGroupSeparator: '\xA0',
// non-breaking space
suffix: ''
},
// The alphabet used for base conversion. It must be at least 2 characters long, with no '+',
// '-', '.', whitespace, or repeated character.
// '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'
ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'; //------------------------------------------------------------------------------------------
// CONSTRUCTOR
/*
* The BigNumber constructor and exported function.
* Create and return a new instance of a BigNumber object.
*
* v {number|string|BigNumber} A numeric value.
* [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.
*/
function BigNumber(v, b) {
var alphabet,
c,
caseChanged,
e,
i,
isNum,
len,
str,
x = this; // Enable constructor call without `new`.
if (!(x instanceof BigNumber)) return new BigNumber(v, b);
if (b == null) {
if (v && v._isBigNumber === true) {
x.s = v.s;
if (!v.c || v.e > MAX_EXP) {
x.c = x.e = null;
} else if (v.e < MIN_EXP) {
x.c = [x.e = 0];
} else {
x.e = v.e;
x.c = v.c.slice();
}
return;
}
if ((isNum = typeof v == 'number') && v * 0 == 0) {
// Use `1 / n` to handle minus zero also.
x.s = 1 / v < 0 ? (v = -v, -1) : 1; // Fast path for integers, where n < 2147483648 (2**31).
if (v === ~~v) {
for (e = 0, i = v; i >= 10; i /= 10, e++);
if (e > MAX_EXP) {
x.c = x.e = null;
} else {
x.e = e;
x.c = [v];
}
return;
}
str = String(v);
} else {
if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);
x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;
} // Decimal point?
if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); // Exponential form?
if ((i = str.search(/e/i)) > 0) {
// Determine exponent.
if (e < 0) e = i;
e += +str.slice(i + 1);
str = str.substring(0, i);
} else if (e < 0) {
// Integer.
e = str.length;
}
} else {
// '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
intCheck(b, 2, ALPHABET.length, 'Base'); // Allow exponential notation to be used with base 10 argument, while
// also rounding to DECIMAL_PLACES as with other bases.
if (b == 10) {
x = new BigNumber(v);
return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);
}
str = String(v);
if (isNum = typeof v == 'number') {
// Avoid potential interpretation of Infinity and NaN as base 44+ values.
if (v * 0 != 0) return parseNumeric(x, str, isNum, b);
x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) {
throw Error(tooManyDigits + v);
}
} else {
x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;
}
alphabet = ALPHABET.slice(0, b);
e = i = 0; // Check that str is a valid base b number.
// Don't use RegExp, so alphabet can contain special characters.
for (len = str.length; i < len; i++) {
if (alphabet.indexOf(c = str.charAt(i)) < 0) {
if (c == '.') {
// If '.' is not the first character and it has not be found before.
if (i > e) {
e = len;
continue;
}
} else if (!caseChanged) {
// Allow e.g. hexadecimal 'FF' as well as 'ff'.
if (str == str.toUpperCase() && (str = str.toLowerCase()) || str == str.toLowerCase() && (str = str.toUpperCase())) {
caseChanged = true;
i = -1;
e = 0;
continue;
}
}
return parseNumeric(x, String(v), isNum, b);
}
} // Prevent later check for length on converted number.
isNum = false;
str = convertBase(str, b, 10, x.s); // Decimal point?
if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');else e = str.length;
} // Determine leading zeros.
for (i = 0; str.charCodeAt(i) === 48; i++); // Determine trailing zeros.
for (len = str.length; str.charCodeAt(--len) === 48;);
if (str = str.slice(i, ++len)) {
len -= i; // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'
if (isNum && BigNumber.DEBUG && len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {
throw Error(tooManyDigits + x.s * v);
} // Overflow?
if ((e = e - i - 1) > MAX_EXP) {
// Infinity.
x.c = x.e = null; // Underflow?
} else if (e < MIN_EXP) {
// Zero.
x.c = [x.e = 0];
} else {
x.e = e;
x.c = []; // Transform base
// e is the base 10 exponent.
// i is where to slice str to get the first element of the coefficient array.
i = (e + 1) % LOG_BASE;
if (e < 0) i += LOG_BASE; // i < 1
if (i < len) {
if (i) x.c.push(+str.slice(0, i));
for (len -= LOG_BASE; i < len;) {
x.c.push(+str.slice(i, i += LOG_BASE));
}
i = LOG_BASE - (str = str.slice(i)).length;
} else {
i -= len;
}
for (; i--; str += '0');
x.c.push(+str);
}
} else {
// Zero.
x.c = [x.e = 0];
}
} // CONSTRUCTOR PROPERTIES
BigNumber.clone = clone;
BigNumber.ROUND_UP = 0;
BigNumber.ROUND_DOWN = 1;
BigNumber.ROUND_CEIL = 2;
BigNumber.ROUND_FLOOR = 3;
BigNumber.ROUND_HALF_UP = 4;
BigNumber.ROUND_HALF_DOWN = 5;
BigNumber.ROUND_HALF_EVEN = 6;
BigNumber.ROUND_HALF_CEIL = 7;
BigNumber.ROUND_HALF_FLOOR = 8;
BigNumber.EUCLID = 9;
/*
* Configure infrequently-changing library-wide settings.
*
* Accept an object with the following optional properties (if the value of a property is
* a number, it must be an integer within the inclusive range stated):
*
* DECIMAL_PLACES {number} 0 to MAX
* ROUNDING_MODE {number} 0 to 8
* EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]
* RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]
* CRYPTO {boolean} true or false
* MODULO_MODE {number} 0 to 9
* POW_PRECISION {number} 0 to MAX
* ALPHABET {string} A string of two or more unique characters which does
* not contain '.'.
* FORMAT {object} An object with some of the following properties:
* prefix {string}
* groupSize {number}
* secondaryGroupSize {number}
* groupSeparator {string}
* decimalSeparator {string}
* fractionGroupSize {number}
* fractionGroupSeparator {string}
* suffix {string}
*
* (The values assigned to the above FORMAT object properties are not checked for validity.)
*
* E.g.
* BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })
*
* Ignore properties/parameters set to null or undefined, except for ALPHABET.
*
* Return an object with the properties current values.
*/
BigNumber.config = BigNumber.set = function (obj) {
var p, v;
if (obj != null) {
if (typeof obj == 'object') {
// DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.
// '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'
if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {
v = obj[p];
intCheck(v, 0, MAX, p);
DECIMAL_PLACES = v;
} // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.
// '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'
if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {
v = obj[p];
intCheck(v, 0, 8, p);
ROUNDING_MODE = v;
} // EXPONENTIAL_AT {number|number[]}
// Integer, -MAX to MAX inclusive or
// [integer -MAX to 0 inclusive, 0 to MAX inclusive].
// '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'
if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {
v = obj[p];
if (v && v.pop) {
intCheck(v[0], -MAX, 0, p);
intCheck(v[1], 0, MAX, p);
TO_EXP_NEG = v[0];
TO_EXP_POS = v[1];
} else {
intCheck(v, -MAX, MAX, p);
TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);
}
} // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or
// [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].
// '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'
if (obj.hasOwnProperty(p = 'RANGE')) {
v = obj[p];
if (v && v.pop) {
intCheck(v[0], -MAX, -1, p);
intCheck(v[1], 1, MAX, p);
MIN_EXP = v[0];
MAX_EXP = v[1];
} else {
intCheck(v, -MAX, MAX, p);
if (v) {
MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);
} else {
throw Error(bignumberError + p + ' cannot be zero: ' + v);
}
}
} // CRYPTO {boolean} true or false.
// '[BigNumber Error] CRYPTO not true or false: {v}'
// '[BigNumber Error] crypto unavailable'
if (obj.hasOwnProperty(p = 'CRYPTO')) {
v = obj[p];
if (v === !!v) {
if (v) {
if (typeof crypto != 'undefined' && crypto && (crypto.getRandomValues || crypto.randomBytes)) {
CRYPTO = v;
} else {
CRYPTO = !v;
throw Error(bignumberError + 'crypto unavailable');
}
} else {
CRYPTO = v;
}
} else {
throw Error(bignumberError + p + ' not true or false: ' + v);
}
} // MODULO_MODE {number} Integer, 0 to 9 inclusive.
// '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'
if (obj.hasOwnProperty(p = 'MODULO_MODE')) {
v = obj[p];
intCheck(v, 0, 9, p);
MODULO_MODE = v;
} // POW_PRECISION {number} Integer, 0 to MAX inclusive.
// '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'
if (obj.hasOwnProperty(p = 'POW_PRECISION')) {
v = obj[p];
intCheck(v, 0, MAX, p);
POW_PRECISION = v;
} // FORMAT {object}
// '[BigNumber Error] FORMAT not an object: {v}'
if (obj.hasOwnProperty(p = 'FORMAT')) {
v = obj[p];
if (typeof v == 'object') FORMAT = v;else throw Error(bignumberError + p + ' not an object: ' + v);
} // ALPHABET {string}
// '[BigNumber Error] ALPHABET invalid: {v}'
if (obj.hasOwnProperty(p = 'ALPHABET')) {
v = obj[p]; // Disallow if only one character,
// or if it contains '+', '-', '.', whitespace, or a repeated character.
if (typeof v == 'string' && !/^.$|[+-.\s]|(.).*\1/.test(v)) {
ALPHABET = v;
} else {
throw Error(bignumberError + p + ' invalid: ' + v);
}
}
} else {
// '[BigNumber Error] Object expected: {v}'
throw Error(bignumberError + 'Object expected: ' + obj);
}
}
return {
DECIMAL_PLACES: DECIMAL_PLACES,
ROUNDING_MODE: ROUNDING_MODE,
EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],
RANGE: [MIN_EXP, MAX_EXP],
CRYPTO: CRYPTO,
MODULO_MODE: MODULO_MODE,
POW_PRECISION: POW_PRECISION,
FORMAT: FORMAT,
ALPHABET: ALPHABET
};
};
/*
* Return true if v is a BigNumber instance, otherwise return false.
*
* If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.
*
* v {any}
*
* '[BigNumber Error] Invalid BigNumber: {v}'
*/
BigNumber.isBigNumber = function (v) {
if (!v || v._isBigNumber !== true) return false;
if (!BigNumber.DEBUG) return true;
var i,
n,
c = v.c,
e = v.e,
s = v.s;
out: if ({}.toString.call(c) == '[object Array]') {
if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {
// If the first element is zero, the BigNumber value must be zero.
if (c[0] === 0) {
if (e === 0 && c.length === 1) return true;
break out;
} // Calculate number of digits that c[0] should have, based on the exponent.
i = (e + 1) % LOG_BASE;
if (i < 1) i += LOG_BASE; // Calculate number of digits of c[0].
//if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {
if (String(c[0]).length == i) {
for (i = 0; i < c.length; i++) {
n = c[i];
if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;
} // Last element cannot be zero, unless it is the only element.
if (n !== 0) return true;
}
} // Infinity/NaN
} else if (c === null && e === null && (s === null || s === 1 || s === -1)) {
return true;
}
throw Error(bignumberError + 'Invalid BigNumber: ' + v);
};
/*
* Return a new BigNumber whose value is the maximum of the arguments.
*
* arguments {number|string|BigNumber}
*/
BigNumber.maximum = BigNumber.max = function () {
return maxOrMin(arguments, P.lt);
};
/*
* Return a new BigNumber whose value is the minimum of the arguments.
*
* arguments {number|string|BigNumber}
*/
BigNumber.minimum = BigNumber.min = function () {
return maxOrMin(arguments, P.gt);
};
/*
* Return a new BigNumber with a random value equal to or greater than 0 and less than 1,
* and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing
* zeros are produced).
*
* [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'
* '[BigNumber Error] crypto unavailable'
*/
BigNumber.random = function () {
var pow2_53 = 0x20000000000000; // Return a 53 bit integer n, where 0 <= n < 9007199254740992.
// Check if Math.random() produces more than 32 bits of randomness.
// If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.
// 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.
var random53bitInt = Math.random() * pow2_53 & 0x1fffff ? function () {
return mathfloor(Math.random() * pow2_53);
} : function () {
return (Math.random() * 0x40000000 | 0) * 0x800000 + (Math.random() * 0x800000 | 0);
};
return function (dp) {
var a,
b,
e,
k,
v,
i = 0,
c = [],
rand = new BigNumber(ONE);
if (dp == null) dp = DECIMAL_PLACES;else intCheck(dp, 0, MAX);
k = mathceil(dp / LOG_BASE);
if (CRYPTO) {
// Browsers supporting crypto.getRandomValues.
if (crypto.getRandomValues) {
a = crypto.getRandomValues(new Uint32Array(k *= 2));
for (; i < k;) {
// 53 bits:
// ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)
// 11111 11111111 11111111 11111111 11100000 00000000 00000000
// ((Math.pow(2, 32) - 1) >>> 11).toString(2)
// 11111 11111111 11111111
// 0x20000 is 2^21.
v = a[i] * 0x20000 + (a[i + 1] >>> 11); // Rejection sampling:
// 0 <= v < 9007199254740992
// Probability that v >= 9e15, is
// 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251
if (v >= 9e15) {
b = crypto.getRandomValues(new Uint32Array(2));
a[i] = b[0];
a[i + 1] = b[1];
} else {
// 0 <= v <= 8999999999999999
// 0 <= (v % 1e14) <= 99999999999999
c.push(v % 1e14);
i += 2;
}
}
i = k / 2; // Node.js supporting crypto.randomBytes.
} else if (crypto.randomBytes) {
// buffer
a = crypto.randomBytes(k *= 7);
for (; i < k;) {
// 0x1000000000000 is 2^48, 0x10000000000 is 2^40
// 0x100000000 is 2^32, 0x1000000 is 2^24
// 11111 11111111 11111111 11111111 11111111 11111111 11111111
// 0 <= v < 9007199254740992
v = (a[i] & 31) * 0x1000000000000 + a[i + 1] * 0x10000000000 + a[i + 2] * 0x100000000 + a[i + 3] * 0x1000000 + (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];
if (v >= 9e15) {
crypto.randomBytes(7).copy(a, i);
} else {
// 0 <= (v % 1e14) <= 99999999999999
c.push(v % 1e14);
i += 7;
}
}
i = k / 7;
} else {
CRYPTO = false;
throw Error(bignumberError + 'crypto unavailable');
}
} // Use Math.random.
if (!CRYPTO) {
for (; i < k;) {
v = random53bitInt();
if (v < 9e15) c[i++] = v % 1e14;
}
}
k = c[--i];
dp %= LOG_BASE; // Convert trailing digits to zeros according to dp.
if (k && dp) {
v = POWS_TEN[LOG_BASE - dp];
c[i] = mathfloor(k / v) * v;
} // Remove trailing elements which are zero.
for (; c[i] === 0; c.pop(), i--); // Zero?
if (i < 0) {
c = [e = 0];
} else {
// Remove leading elements which are zero and adjust exponent accordingly.
for (e = -1; c[0] === 0; c.splice(0, 1), e -= LOG_BASE); // Count the digits of the first element of c to determine leading zeros, and...
for (i = 1, v = c[0]; v >= 10; v /= 10, i++); // adjust the exponent accordingly.
if (i < LOG_BASE) e -= LOG_BASE - i;
}
rand.e = e;
rand.c = c;
return rand;
};
}();
/*
* Return a BigNumber whose value is the sum of the arguments.
*
* arguments {number|string|BigNumber}
*/
BigNumber.sum = function () {
var i = 1,
args = arguments,
sum = new BigNumber(args[0]);
for (; i < args.length;) sum = sum.plus(args[i++]);
return sum;
}; // PRIVATE FUNCTIONS
// Called by BigNumber and BigNumber.prototype.toString.
convertBase = function () {
var decimal = '0123456789';
/*
* Convert string of baseIn to an array of numbers of baseOut.
* Eg. toBaseOut('255', 10, 16) returns [15, 15].
* Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].
*/
function toBaseOut(str, baseIn, baseOut, alphabet) {
var j,
arr = [0],
arrL,
i = 0,
len = str.length;
for (; i < len;) {
for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);
arr[0] += alphabet.indexOf(str.charAt(i++));
for (j = 0; j < arr.length; j++) {
if (arr[j] > baseOut - 1) {
if (arr[j + 1] == null) arr[j + 1] = 0;
arr[j + 1] += arr[j] / baseOut | 0;
arr[j] %= baseOut;
}
}
}
return arr.reverse();
} // Convert a numeric string of baseIn to a numeric string of baseOut.
// If the caller is toString, we are converting from base 10 to baseOut.
// If the caller is BigNumber, we are converting from baseIn to base 10.
return function (str, baseIn, baseOut, sign, callerIsToString) {
var alphabet,
d,
e,
k,
r,
x,
xc,
y,
i = str.indexOf('.'),
dp = DECIMAL_PLACES,
rm = ROUNDING_MODE; // Non-integer.
if (i >= 0) {
k = POW_PRECISION; // Unlimited precision.
POW_PRECISION = 0;
str = str.replace('.', '');
y = new BigNumber(baseIn);
x = y.pow(str.length - i);
POW_PRECISION = k; // Convert str as if an integer, then restore the fraction part by dividing the
// result by its base raised to a power.
y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'), 10, baseOut, decimal);
y.e = y.c.length;
} // Convert the number as integer.
xc = toBaseOut(str, baseIn, baseOut, callerIsToString ? (alphabet = ALPHABET, decimal) : (alphabet = decimal, ALPHABET)); // xc now represents str as an integer and converted to baseOut. e is the exponent.
e = k = xc.length; // Remove trailing zeros.
for (; xc[--k] == 0; xc.pop()); // Zero?
if (!xc[0]) return alphabet.charAt(0); // Does str represent an integer? If so, no need for the division.
if (i < 0) {
--e;
} else {
x.c = xc;
x.e = e; // The sign is needed for correct rounding.
x.s = sign;
x = div(x, y, dp, rm, baseOut);
xc = x.c;
r = x.r;
e = x.e;
} // xc now represents str converted to baseOut.
// THe index of the rounding digit.
d = e + dp + 1; // The rounding digit: the digit to the right of the digit that may be rounded up.
i = xc[d]; // Look at the rounding digits and mode to determine whether to round up.
k = baseOut / 2;
r = r || d < 0 || xc[d + 1] != null;
r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : i > k || i == k && (rm == 4 || r || rm == 6 && xc[d - 1] & 1 || rm == (x.s < 0 ? 8 : 7)); // If the index of the rounding digit is not greater than zero, or xc represents
// zero, then the result of the base conversion is zero or, if rounding up, a value
// such as 0.00001.
if (d < 1 || !xc[0]) {
// 1^-dp or 0
str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);
} else {
// Truncate xc to the required number of decimal places.
xc.length = d; // Round up?
if (r) {
// Rounding up may mean the previous digit has to be rounded up and so on.
for (--baseOut; ++xc[--d] > baseOut;) {
xc[d] = 0;
if (!d) {
++e;
xc = [1].concat(xc);
}
}
} // Determine trailing zeros.
for (k = xc.length; !xc[--k];); // E.g. [4, 11, 15] becomes 4bf.
for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++])); // Add leading zeros, decimal point and trailing zeros as required.
str = toFixedPoint(str, e, alphabet.charAt(0));
} // The caller will add the sign.
return str;
};
}(); // Perform division in the specified base. Called by div and convertBase.
div = function () {
// Assume non-zero x and k.
function multiply(x, k, base) {
var m,
temp,
xlo,
xhi,
carry = 0,
i = x.length,
klo = k % SQRT_BASE,
khi = k / SQRT_BASE | 0;
for (x = x.slice(); i--;) {
xlo = x[i] % SQRT_BASE;
xhi = x[i] / SQRT_BASE | 0;
m = khi * xlo + xhi * klo;
temp = klo * xlo + m % SQRT_BASE * SQRT_BASE + carry;
carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;
x[i] = temp % base;
}
if (carry) x = [carry].concat(x);
return x;
}
function compare(a, b, aL, bL) {
var i, cmp;
if (aL != bL) {
cmp = aL > bL ? 1 : -1;
} else {
for (i = cmp = 0; i < aL; i++) {
if (a[i] != b[i]) {
cmp = a[i] > b[i] ? 1 : -1;
break;
}
}
}
return cmp;
}
function subtract(a, b, aL, base) {
var i = 0; // Subtract b from a.
for (; aL--;) {
a[aL] -= i;
i = a[aL] < b[aL] ? 1 : 0;
a[aL] = i * base + a[aL] - b[aL];
} // Remove leading zeros.
for (; !a[0] && a.length > 1; a.splice(0, 1));
} // x: dividend, y: divisor.
return function (x, y, dp, rm, base) {
var cmp,
e,
i,
more,
n,
prod,
prodL,
q,
qc,
rem,
remL,
rem0,
xi,
xL,
yc0,
yL,
yz,
s = x.s == y.s ? 1 : -1,
xc = x.c,
yc = y.c; // Either NaN, Infinity or 0?
if (!xc || !xc[0] || !yc || !yc[0]) {
return new BigNumber( // Return NaN if either NaN, or both Infinity or 0.
!x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.
xc && xc[0] == 0 || !yc ? s * 0 : s / 0);
}
q = new BigNumber(s);
qc = q.c = [];
e = x.e - y.e;
s = dp + e + 1;
if (!base) {
base = BASE;
e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);
s = s / LOG_BASE | 0;
} // Result exponent may be one less then the current value of e.
// The coefficients of the BigNumbers from convertBase may have trailing zeros.
for (i = 0; yc[i] == (xc[i] || 0); i++);
if (yc[i] > (xc[i] || 0)) e--;
if (s < 0) {
qc.push(1);
more = true;
} else {
xL = xc.length;
yL = yc.length;
i = 0;
s += 2; // Normalise xc and yc so highest order digit of yc is >= base / 2.
n = mathfloor(base / (yc[0] + 1)); // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.
// if (n > 1 || n++ == 1 && yc[0] < base / 2) {
if (n > 1) {
yc = multiply(yc, n, base);
xc = multiply(xc, n, base);
yL = yc.length;
xL = xc.length;
}
xi = yL;
rem = xc.slice(0, yL);
remL = rem.length; // Add zeros to make remainder as long as divisor.
for (; remL < yL; rem[remL++] = 0);
yz = yc.slice();
yz = [0].concat(yz);
yc0 = yc[0];
if (yc[1] >= base / 2) yc0++; // Not necessary, but to prevent trial digit n > base, when using base 3.
// else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;
do {
n = 0; // Compare divisor and remainder.
cmp = compare(yc, rem, yL, remL); // If divisor < remainder.
if (cmp < 0) {
// Calculate trial digit, n.
rem0 = rem[0];
if (yL != remL) rem0 = rem0 * base + (rem[1] || 0); // n is how many times the divisor goes into the current remainder.
n = mathfloor(rem0 / yc0); // Algorithm:
// product = divisor multiplied by trial digit (n).
// Compare product and remainder.
// If product is greater than remainder:
// Subtract divisor from product, decrement trial digit.
// Subtract product from remainder.
// If product was less than remainder at the last compare:
// Compare new remainder and divisor.
// If remainder is greater than divisor:
// Subtract divisor from remainder, increment trial digit.
if (n > 1) {
// n may be > base only when base is 3.
if (n >= base) n = base - 1; // product = divisor * trial digit.
prod = multiply(yc, n, base);
prodL = prod.length;
remL = rem.length; // Compare product and remainder.
// If product > remainder then trial digit n too high.
// n is 1 too high about 5% of the time, and is not known to have
// ever been more than 1 too high.
while (compare(prod, rem, prodL, remL) == 1) {
n--; // Subtract divisor from product.
subtract(prod, yL < prodL ? yz : yc, prodL, base);
prodL = prod.length;
cmp = 1;
}
} else {
// n is 0 or 1, cmp is -1.
// If n is 0, there is no need to compare yc and rem again below,
// so change cmp to 1 to avoid it.
// If n is 1, leave cmp as -1, so yc and rem are compared again.
if (n == 0) {
// divisor < remainder, so n must be at least 1.
cmp = n = 1;
} // product = divisor
prod = yc.slice();
prodL = prod.length;
}
if (prodL < remL) prod = [0].concat(prod); // Subtract product from remainder.
subtract(rem, prod, remL, base);
remL = rem.length; // If product was < remainder.
if (cmp == -1) {
// Compare divisor and new remainder.
// If divisor < new remainder, subtract divisor from remainder.
// Trial digit n too low.
// n is 1 too low about 5% of the time, and very rarely 2 too low.
while (compare(yc, rem, yL, remL) < 1) {
n++; // Subtract divisor from remainder.
subtract(rem, yL < remL ? yz : yc, remL, base);
remL = rem.length;
}
}
} else if (cmp === 0) {
n++;
rem = [0];
} // else cmp === 1 and n will be 0
// Add the next digit, n, to the result array.
qc[i++] = n; // Update the remainder.
if (rem[0]) {
rem[remL++] = xc[xi] || 0;
} else {
rem = [xc[xi]];
remL = 1;
}
} while ((xi++ < xL || rem[0] != null) && s--);
more = rem[0] != null; // Leading zero?
if (!qc[0]) qc.splice(0, 1);
}
if (base == BASE) {
// To calculate q.e, first get the number of digits of qc[0].
for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);
round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); // Caller is convertBase.
} else {
q.e = e;
q.r = +more;
}
return q;
};
}();
/*
* Return a string representing the value of BigNumber n in fixed-point or exponential
* notation rounded to the specified decimal places or significant digits.
*
* n: a BigNumber.
* i: the index of the last digit required (i.e. the digit that may be rounded up).
* rm: the rounding mode.
* id: 1 (toExponential) or 2 (toPrecision).
*/
function format(n, i, rm, id) {
var c0, e, ne, len, str;
if (rm == null) rm = ROUNDING_MODE;else intCheck(rm, 0, 8);
if (!n.c) return n.toString();
c0 = n.c[0];
ne = n.e;
if (i == null) {
str = coeffToString(n.c);
str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) ? toExponential(str, ne) : toFixedPoint(str, ne, '0');
} else {
n = round(new BigNumber(n), i, rm); // n.e may have changed if the value was rounded up.
e = n.e;
str = coeffToString(n.c);
len = str.length; // toPrecision returns exponential notation if the number of significant digits
// specified is less than the number of digits necessary to represent the integer
// part of the value in fixed-point notation.
// Exponential notation.
if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {
// Append zeros?
for (; len < i; str += '0', len++);
str = toExponential(str, e); // Fixed-point notation.
} else {
i -= ne;
str = toFixedPoint(str, e, '0'); // Append zeros?
if (e + 1 > len) {
if (--i > 0) for (str += '.'; i--; str += '0');
} else {
i += e - len;
if (i > 0) {
if (e + 1 == len) str += '.';
for (; i--; str += '0');
}
}
}
}
return n.s < 0 && c0 ? '-' + str : str;
} // Handle BigNumber.max and BigNumber.min.
function maxOrMin(args, method) {
var n,
i = 1,
m = new BigNumber(args[0]);
for (; i < args.length; i++) {
n = new BigNumber(args[i]); // If any number is NaN, return NaN.
if (!n.s) {
m = n;
break;
} else if (method.call(m, n)) {
m = n;
}
}
return m;
}
/*
* Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.
* Called by minus, plus and times.
*/
function normalise(n, c, e) {
var i = 1,
j = c.length; // Remove trailing zeros.
for (; !c[--j]; c.pop()); // Calculate the base 10 exponent. First get the number of digits of c[0].
for (j = c[0]; j >= 10; j /= 10, i++); // Overflow?
if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {
// Infinity.
n.c = n.e = null; // Underflow?
} else if (e < MIN_EXP) {
// Zero.
n.c = [n.e = 0];
} else {
n.e = e;
n.c = c;
}
return n;
} // Handle values that fail the validity test in BigNumber.
parseNumeric = function () {
var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i,
dotAfter = /^([^.]+)\.$/,
dotBefore = /^\.([^.]+)$/,
isInfinityOrNaN = /^-?(Infinity|NaN)$/,
whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g;
return function (x, str, isNum, b) {
var base,
s = isNum ? str : str.replace(whitespaceOrPlus, ''); // No exception on ±Infinity or NaN.
if (isInfinityOrNaN.test(s)) {
x.s = isNaN(s) ? null : s < 0 ? -1 : 1;
} else {
if (!isNum) {
// basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i
s = s.replace(basePrefix, function (m, p1, p2) {
base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;
return !b || b == base ? p1 : m;
});
if (b) {
base = b; // E.g. '1.' to '1', '.1' to '0.1'
s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');
}
if (str != s) return new BigNumber(s, base);
} // '[BigNumber Error] Not a number: {n}'
// '[BigNumber Error] Not a base {b} number: {n}'
if (BigNumber.DEBUG) {
throw Error(bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);
} // NaN
x.s = null;
}
x.c = x.e = null;
};
}();
/*
* Round x to sd significant digits using rounding mode rm. Check for over/under-flow.
* If r is truthy, it is known that there are more digits after the rounding digit.
*/
function round(x, sd, rm, r) {
var d,
i,
j,
k,
n,
ni,
rd,
xc = x.c,
pows10 = POWS_TEN; // if x is not Infinity or NaN...
if (xc) {
// rd is the rounding digit, i.e. the digit after the digit that may be rounded up.
// n is a base 1e14 number, the value of the element of array x.c containing rd.
// ni is the index of n within x.c.
// d is the number of digits of n.
// i is the index of rd within n including leading zeros.
// j is the actual index of rd within n (if < 0, rd is a leading zero).
out: {
// Get the number of digits of the first element of xc.
for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);
i = sd - d; // If the rounding digit is in the first element of xc...
if (i < 0) {
i += LOG_BASE;
j = sd;
n = xc[ni = 0]; // Get the rounding digit at index j of n.
rd = n / pows10[d - j - 1] % 10 | 0;
} else {
ni = mathceil((i + 1) / LOG_BASE);
if (ni >= xc.length) {
if (r) {
// Needed by sqrt.
for (; xc.length <= ni; xc.push(0));
n = rd = 0;
d = 1;
i %= LOG_BASE;
j = i - LOG_BASE + 1;
} else {
break out;
}
} else {
n = k = xc[ni]; // Get the number of digits of n.
for (d = 1; k >= 10; k /= 10, d++); // Get the index of rd within n.
i %= LOG_BASE; // Get the index of rd within n, adjusted for leading zeros.
// The number of leading zeros of n is given by LOG_BASE - d.
j = i - LOG_BASE + d; // Get the rounding digit at index j of n.
rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;
}
}
r = r || sd < 0 || // Are there any non-zero digits after the rounding digit?
// The expression n % pows10[d - j - 1] returns all digits of n to the right
// of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.
xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);
r = rm < 4 ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && // Check whether the digit to the left of the rounding digit is odd.
(i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10 & 1 || rm == (x.s < 0 ? 8 : 7));
if (sd < 1 || !xc[0]) {
xc.length = 0;
if (r) {
// Convert sd to decimal places.
sd -= x.e + 1; // 1, 0.1, 0.01, 0.001, 0.0001 etc.
xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];
x.e = -sd || 0;
} else {
// Zero.
xc[0] = x.e = 0;
}
return x;
} // Remove excess digits.
if (i == 0) {
xc.length = ni;
k = 1;
ni--;
} else {
xc.length = ni + 1;
k = pows10[LOG_BASE - i]; // E.g. 56700 becomes 56000 if 7 is the rounding digit.
// j > 0 means i > number of leading zeros of n.
xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;
} // Round up?
if (r) {
for (;;) {
// If the digit to be rounded up is in the first element of xc...
if (ni == 0) {
// i will be the length of xc[0] before k is added.
for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);
j = xc[0] += k;
for (k = 1; j >= 10; j /= 10, k++); // if i != k the length has increased.
if (i != k) {
x.e++;
if (xc[0] == BASE) xc[0] = 1;
}
break;
} else {
xc[ni] += k;
if (xc[ni] != BASE) break;
xc[ni--] = 0;
k = 1;
}
}
} // Remove trailing zeros.
for (i = xc.length; xc[--i] === 0; xc.pop());
} // Overflow? Infinity.
if (x.e > MAX_EXP) {
x.c = x.e = null; // Underflow? Zero.
} else if (x.e < MIN_EXP) {
x.c = [x.e = 0];
}
}
return x;
}
function valueOf(n) {
var str,
e = n.e;
if (e === null) return n.toString();
str = coeffToString(n.c);
str = e <= TO_EXP_NEG || e >= TO_EXP_POS ? toExponential(str, e) : toFixedPoint(str, e, '0');
return n.s < 0 ? '-' + str : str;
} // PROTOTYPE/INSTANCE METHODS
/*
* Return a new BigNumber whose value is the absolute value of this BigNumber.
*/
P.absoluteValue = P.abs = function () {
var x = new BigNumber(this);
if (x.s < 0) x.s = 1;
return x;
};
/*
* Return
* 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),
* -1 if the value of this BigNumber is less than the value of BigNumber(y, b),
* 0 if they have the same value,
* or null if the value of either is NaN.
*/
P.comparedTo = function (y, b) {
return compare(this, new BigNumber(y, b));
};
/*
* If dp is undefined or null or true or false, return the number of decimal places of the
* value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.
*
* Otherwise, if dp is a number, return a new BigNumber whose value is the value of this
* BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or
* ROUNDING_MODE if rm is omitted.
*
* [dp] {number} Decimal places: integer, 0 to MAX inclusive.
* [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
*/
P.decimalPlaces = P.dp = function (dp, rm) {
var c,
n,
v,
x = this;
if (dp != null) {
intCheck(dp, 0, MAX);
if (rm == null) rm = ROUNDING_MODE;else intCheck(rm, 0, 8);
return round(new BigNumber(x), dp + x.e + 1, rm);
}
if (!(c = x.c)) return null;
n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; // Subtract the number of trailing zeros of the last number.
if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);
if (n < 0) n = 0;
return n;
};
/*
* n / 0 = I
* n / N = N
* n / I = 0
* 0 / n = 0
* 0 / 0 = N
* 0 / N = N
* 0 / I = 0
* N / n = N
* N / 0 = N
* N / N = N
* N / I = N
* I / n = I
* I / 0 = I
* I / N = N
* I / I = N
*
* Return a new BigNumber whose value is the value of this BigNumber divided by the value of
* BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.
*/
P.dividedBy = P.div = function (y, b) {
return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);
};
/*
* Return a new BigNumber whose value is the integer part of dividing the value of this
* BigNumber by the value of BigNumber(y, b).
*/
P.dividedToIntegerBy = P.idiv = function (y, b) {
return div(this, new BigNumber(y, b), 0, 1);
};
/*
* Return a BigNumber whose value is the value of this BigNumber exponentiated by n.
*
* If m is present, return the result modulo m.
* If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.
* If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.
*
* The modular power operation works efficiently when x, n, and m are integers, otherwise it
* is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.
*
* n {number|string|BigNumber} The exponent. An integer.
* [m] {number|string|BigNumber} The modulus.
*
* '[BigNumber Error] Exponent not an integer: {n}'
*/
P.exponentiatedBy = P.pow = function (n, m) {
var half,
isModExp,
i,
k,
more,
nIsBig,
nIsNeg,
nIsOdd,
y,
x = this;
n = new BigNumber(n); // Allow NaN and ±Infinity, but not other non-integers.
if (n.c && !n.isInteger()) {
throw Error(bignumberError + 'Exponent not an integer: ' + valueOf(n));
}
if (m != null) m = new BigNumber(m); // Exponent of MAX_SAFE_INTEGER is 15.
nIsBig = n.e > 14; // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.
if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {
// The sign of the result of pow when x is negative depends on the evenness of n.
// If +n overflows to ±Infinity, the evenness of n would be not be known.
y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));
return m ? y.mod(m) : y;
}
nIsNeg = n.s < 0;
if (m) {
// x % m returns NaN if abs(m) is zero, or m is NaN.
if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);
isModExp = !nIsNeg && x.isInteger() && m.isInteger();
if (isModExp) x = x.mod(m); // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.
// Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.
} else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 // [1, 240000000]
? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7 // [80000000000000] [99999750000000]
: x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {
// If x is negative and n is odd, k = -0, else k = 0.
k = x.s < 0 && isOdd(n) ? -0 : 0; // If x >= 1, k = ±Infinity.
if (x.e > -1) k = 1 / k; // If n is negative return ±0, else return ±Infinity.
return new BigNumber(nIsNeg ? 1 / k : k);
} else if (POW_PRECISION) {
// Truncating each coefficient array to a length of k after each multiplication
// equates to truncating significant digits to POW_PRECISION + [28, 41],
// i.e. there will be a minimum of 28 guard digits retained.
k = mathceil(POW_PRECISION / LOG_BASE + 2);
}
if (nIsBig) {
half = new BigNumber(0.5);
if (nIsNeg) n.s = 1;
nIsOdd = isOdd(n);
} else {
i = Math.abs(+valueOf(n));
nIsOdd = i % 2;
}
y = new BigNumber(ONE); // Performs 54 loop iterations for n of 9007199254740991.
for (;;) {
if (nIsOdd) {
y = y.times(x);
if (!y.c) break;
if (k) {
if (y.c.length > k) y.c.length = k;
} else if (isModExp) {
y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));
}
}
if (i) {
i = mathfloor(i / 2);
if (i === 0) break;
nIsOdd = i % 2;
} else {
n = n.times(half);
round(n, n.e + 1, 1);
if (n.e > 14) {
nIsOdd = isOdd(n);
} else {
i = +valueOf(n);
if (i === 0) break;
nIsOdd = i % 2;
}
}
x = x.times(x);
if (k) {
if (x.c && x.c.length > k) x.c.length = k;
} else if (isModExp) {
x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));
}
}
if (isModExp) return y;
if (nIsNeg) y = ONE.div(y);
return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;
};
/*
* Return a new BigNumber whose value is the value of this BigNumber rounded to an integer
* using rounding mode rm, or ROUNDING_MODE if rm is omitted.
*
* [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'
*/
P.integerValue = function (rm) {
var n = new BigNumber(this);
if (rm == null) rm = ROUNDING_MODE;else intCheck(rm, 0, 8);
return round(n, n.e + 1, rm);
};
/*
* Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),
* otherwise return false.
*/
P.isEqualTo = P.eq = function (y, b) {
return compare(this, new BigNumber(y, b)) === 0;
};
/*
* Return true if the value of this BigNumber is a finite number, otherwise return false.
*/
P.isFinite = function () {
return !!this.c;
};
/*
* Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),
* otherwise return false.
*/
P.isGreaterThan = P.gt = function (y, b) {
return compare(this, new BigNumber(y, b)) > 0;
};
/*
* Return true if the value of this BigNumber is greater than or equal to the value of
* BigNumber(y, b), otherwise return false.
*/
P.isGreaterThanOrEqualTo = P.gte = function (y, b) {
return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;
};
/*
* Return true if the value of this BigNumber is an integer, otherwise return false.
*/
P.isInteger = function () {
return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;
};
/*
* Return true if the value of this BigNumber is less than the value of BigNumber(y, b),
* otherwise return false.
*/
P.isLessThan = P.lt = function (y, b) {
return compare(this, new BigNumber(y, b)) < 0;
};
/*
* Return true if the value of this BigNumber is less than or equal to the value of
* BigNumber(y, b), otherwise return false.
*/
P.isLessThanOrEqualTo = P.lte = function (y, b) {
return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;
};
/*
* Return true if the value of this BigNumber is NaN, otherwise return false.
*/
P.isNaN = function () {
return !this.s;
};
/*
* Return true if the value of this BigNumber is negative, otherwise return false.
*/
P.isNegative = function () {
return this.s < 0;
};
/*
* Return true if the value of this BigNumber is positive, otherwise return false.
*/
P.isPositive = function () {
return this.s > 0;
};
/*
* Return true if the value of this BigNumber is 0 or -0, otherwise return false.
*/
P.isZero = function () {
return !!this.c && this.c[0] == 0;
};
/*
* n - 0 = n
* n - N = N
* n - I = -I
* 0 - n = -n
* 0 - 0 = 0
* 0 - N = N
* 0 - I = -I
* N - n = N
* N - 0 = N
* N - N = N
* N - I = N
* I - n = I
* I - 0 = I
* I - N = N
* I - I = N
*
* Return a new BigNumber whose value is the value of this BigNumber minus the value of
* BigNumber(y, b).
*/
P.minus = function (y, b) {
var i,
j,
t,
xLTy,
x = this,
a = x.s;
y = new BigNumber(y, b);
b = y.s; // Either NaN?
if (!a || !b) return new BigNumber(NaN); // Signs differ?
if (a != b) {
y.s = -b;
return x.plus(y);
}
var xe = x.e / LOG_BASE,
ye = y.e / LOG_BASE,
xc = x.c,
yc = y.c;
if (!xe || !ye) {
// Either Infinity?
if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN); // Either zero?
if (!xc[0] || !yc[0]) {
// Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x : // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity
ROUNDING_MODE == 3 ? -0 : 0);
}
}
xe = bitFloor(xe);
ye = bitFloor(ye);
xc = xc.slice(); // Determine which is the bigger number.
if (a = xe - ye) {
if (xLTy = a < 0) {
a = -a;
t = xc;
} else {
ye = xe;
t = yc;
}
t.reverse(); // Prepend zeros to equalise exponents.
for (b = a; b--; t.push(0));
t.reverse();
} else {
// Exponents equal. Check digit by digit.
j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;
for (a = b = 0; b < j; b++) {
if (xc[b] != yc[b]) {
xLTy = xc[b] < yc[b];
break;
}
}
} // x < y? Point xc to the array of the bigger number.
if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;
b = (j = yc.length) - (i = xc.length); // Append zeros to xc if shorter.
// No need to add zeros to yc if shorter as subtract only needs to start at yc.length.
if (b > 0) for (; b--; xc[i++] = 0);
b = BASE - 1; // Subtract yc from xc.
for (; j > a;) {
if (xc[--j] < yc[j]) {
for (i = j; i && !xc[--i]; xc[i] = b);
--xc[i];
xc[j] += BASE;
}
xc[j] -= yc[j];
} // Remove leading zeros and adjust exponent accordingly.
for (; xc[0] == 0; xc.splice(0, 1), --ye); // Zero?
if (!xc[0]) {
// Following IEEE 754 (2008) 6.3,
// n - n = +0 but n - n = -0 when rounding towards -Infinity.
y.s = ROUNDING_MODE == 3 ? -1 : 1;
y.c = [y.e = 0];
return y;
} // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity
// for finite x and y.
return normalise(y, xc, ye);
};
/*
* n % 0 = N
* n % N = N
* n % I = n
* 0 % n = 0
* -0 % n = -0
* 0 % 0 = N
* 0 % N = N
* 0 % I = 0
* N % n = N
* N % 0 = N
* N % N = N
* N % I = N
* I % n = N
* I % 0 = N
* I % N = N
* I % I = N
*
* Return a new BigNumber whose value is the value of this BigNumber modulo the value of
* BigNumber(y, b). The result depends on the value of MODULO_MODE.
*/
P.modulo = P.mod = function (y, b) {
var q,
s,
x = this;
y = new BigNumber(y, b); // Return NaN if x is Infinity or NaN, or y is NaN or zero.
if (!x.c || !y.s || y.c && !y.c[0]) {
return new BigNumber(NaN); // Return x if y is Infinity or x is zero.
} else if (!y.c || x.c && !x.c[0]) {
return new BigNumber(x);
}
if (MODULO_MODE == 9) {
// Euclidian division: q = sign(y) * floor(x / abs(y))
// r = x - qy where 0 <= r < abs(y)
s = y.s;
y.s = 1;
q = div(x, y, 0, 3);
y.s = s;
q.s *= s;
} else {
q = div(x, y, 0, MODULO_MODE);
}
y = x.minus(q.times(y)); // To match JavaScript %, ensure sign of zero is sign of dividend.
if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;
return y;
};
/*
* n * 0 = 0
* n * N = N
* n * I = I
* 0 * n = 0
* 0 * 0 = 0
* 0 * N = N
* 0 * I = N
* N * n = N
* N * 0 = N
* N * N = N
* N * I = N
* I * n = I
* I * 0 = N
* I * N = N
* I * I = I
*
* Return a new BigNumber whose value is the value of this BigNumber multiplied by the value
* of BigNumber(y, b).
*/
P.multipliedBy = P.times = function (y, b) {
var c,
e,
i,
j,
k,
m,
xcL,
xlo,
xhi,
ycL,
ylo,
yhi,
zc,
base,
sqrtBase,
x = this,
xc = x.c,
yc = (y = new BigNumber(y, b)).c; // Either NaN, ±Infinity or ±0?
if (!xc || !yc || !xc[0] || !yc[0]) {
// Return NaN if either is NaN, or one is 0 and the other is Infinity.
if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {
y.c = y.e = y.s = null;
} else {
y.s *= x.s; // Return ±Infinity if either is ±Infinity.
if (!xc || !yc) {
y.c = y.e = null; // Return ±0 if either is ±0.
} else {
y.c = [0];
y.e = 0;
}
}
return y;
}
e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);
y.s *= x.s;
xcL = xc.length;
ycL = yc.length; // Ensure xc points to longer array and xcL to its length.
if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; // Initialise the result array with zeros.
for (i = xcL + ycL, zc = []; i--; zc.push(0));
base = BASE;
sqrtBase = SQRT_BASE;
for (i = ycL; --i >= 0;) {
c = 0;
ylo = yc[i] % sqrtBase;
yhi = yc[i] / sqrtBase | 0;
for (k = xcL, j = i + k; j > i;) {
xlo = xc[--k] % sqrtBase;
xhi = xc[k] / sqrtBase | 0;
m = yhi * xlo + xhi * ylo;
xlo = ylo * xlo + m % sqrtBase * sqrtBase + zc[j] + c;
c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;
zc[j--] = xlo % base;
}
zc[j] = c;
}
if (c) {
++e;
} else {
zc.splice(0, 1);
}
return normalise(y, zc, e);
};
/*
* Return a new BigNumber whose value is the value of this BigNumber negated,
* i.e. multiplied by -1.
*/
P.negated = function () {
var x = new BigNumber(this);
x.s = -x.s || null;
return x;
};
/*
* n + 0 = n
* n + N = N
* n + I = I
* 0 + n = n
* 0 + 0 = 0
* 0 + N = N
* 0 + I = I
* N + n = N
* N + 0 = N
* N + N = N
* N + I = N
* I + n = I
* I + 0 = I
* I + N = N
* I + I = I
*
* Return a new BigNumber whose value is the value of this BigNumber plus the value of
* BigNumber(y, b).
*/
P.plus = function (y, b) {
var t,
x = this,
a = x.s;
y = new BigNumber(y, b);
b = y.s; // Either NaN?
if (!a || !b) return new BigNumber(NaN); // Signs differ?
if (a != b) {
y.s = -b;
return x.minus(y);
}
var xe = x.e / LOG_BASE,
ye = y.e / LOG_BASE,
xc = x.c,
yc = y.c;
if (!xe || !ye) {
// Return ±Infinity if either ±Infinity.
if (!xc || !yc) return new BigNumber(a / 0); // Either zero?
// Return y if y is non-zero, x if x is non-zero, or zero if both are zero.
if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);
}
xe = bitFloor(xe);
ye = bitFloor(ye);
xc = xc.slice(); // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.
if (a = xe - ye) {
if (a > 0) {
ye = xe;
t = yc;
} else {
a = -a;
t = xc;
}
t.reverse();
for (; a--; t.push(0));
t.reverse();
}
a = xc.length;
b = yc.length; // Point xc to the longer array, and b to the shorter length.
if (a - b < 0) t = yc, yc = xc, xc = t, b = a; // Only start adding at yc.length - 1 as the further digits of xc can be ignored.
for (a = 0; b;) {
a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;
xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;
}
if (a) {
xc = [a].concat(xc);
++ye;
} // No need to check for zero, as +x + +y != 0 && -x + -y != 0
// ye = MAX_EXP + 1 possible
return normalise(y, xc, ye);
};
/*
* If sd is undefined or null or true or false, return the number of significant digits of
* the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.
* If sd is true include integer-part trailing zeros in the count.
*
* Otherwise, if sd is a number, return a new BigNumber whose value is the value of this
* BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or
* ROUNDING_MODE if rm is omitted.
*
* sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.
* boolean: whether to count integer-part trailing zeros: true or false.
* [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
*/
P.precision = P.sd = function (sd, rm) {
var c,
n,
v,
x = this;
if (sd != null && sd !== !!sd) {
intCheck(sd, 1, MAX);
if (rm == null) rm = ROUNDING_MODE;else intCheck(rm, 0, 8);
return round(new BigNumber(x), sd, rm);
}
if (!(c = x.c)) return null;
v = c.length - 1;
n = v * LOG_BASE + 1;
if (v = c[v]) {
// Subtract the number of trailing zeros of the last element.
for (; v % 10 == 0; v /= 10, n--); // Add the number of digits of the first element.
for (v = c[0]; v >= 10; v /= 10, n++);
}
if (sd && x.e + 1 > n) n = x.e + 1;
return n;
};
/*
* Return a new BigNumber whose value is the value of this BigNumber shifted by k places
* (powers of 10). Shift to the right if n > 0, and to the left if n < 0.
*
* k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'
*/
P.shiftedBy = function (k) {
intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
return this.times('1e' + k);
};
/*
* sqrt(-n) = N
* sqrt(N) = N
* sqrt(-I) = N
* sqrt(I) = I
* sqrt(0) = 0
* sqrt(-0) = -0
*
* Return a new BigNumber whose value is the square root of the value of this BigNumber,
* rounded according to DECIMAL_PLACES and ROUNDING_MODE.
*/
P.squareRoot = P.sqrt = function () {
var m,
n,
r,
rep,
t,
x = this,
c = x.c,
s = x.s,
e = x.e,
dp = DECIMAL_PLACES + 4,
half = new BigNumber('0.5'); // Negative/NaN/Infinity/zero?
if (s !== 1 || !c || !c[0]) {
return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);
} // Initial estimate.
s = Math.sqrt(+valueOf(x)); // Math.sqrt underflow/overflow?
// Pass x to Math.sqrt as integer, then adjust the exponent of the result.
if (s == 0 || s == 1 / 0) {
n = coeffToString(c);
if ((n.length + e) % 2 == 0) n += '0';
s = Math.sqrt(+n);
e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);
if (s == 1 / 0) {
n = '1e' + e;
} else {
n = s.toExponential();
n = n.slice(0, n.indexOf('e') + 1) + e;
}
r = new BigNumber(n);
} else {
r = new BigNumber(s + '');
} // Check for zero.
// r could be zero if MIN_EXP is changed after the this value was created.
// This would cause a division by zero (x/t) and hence Infinity below, which would cause
// coeffToString to throw.
if (r.c[0]) {
e = r.e;
s = e + dp;
if (s < 3) s = 0; // Newton-Raphson iteration.
for (;;) {
t = r;
r = half.times(t.plus(div(x, t, dp, 1)));
if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {
// The exponent of r may here be one less than the final result exponent,
// e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits
// are indexed correctly.
if (r.e < e) --s;
n = n.slice(s - 3, s + 1); // The 4th rounding digit may be in error by -1 so if the 4 rounding digits
// are 9999 or 4999 (i.e. approaching a rounding boundary) continue the
// iteration.
if (n == '9999' || !rep && n == '4999') {
// On the first iteration only, check to see if rounding up gives the
// exact result as the nines may infinitely repeat.
if (!rep) {
round(t, t.e + DECIMAL_PLACES + 2, 0);
if (t.times(t).eq(x)) {
r = t;
break;
}
}
dp += 4;
s += 4;
rep = 1;
} else {
// If rounding digits are null, 0{0,4} or 50{0,3}, check for exact
// result. If not, then there are further digits and m will be truthy.
if (!+n || !+n.slice(1) && n.charAt(0) == '5') {
// Truncate to the first rounding digit.
round(r, r.e + DECIMAL_PLACES + 2, 1);
m = !r.times(r).eq(x);
}
break;
}
}
}
}
return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);
};
/*
* Return a string representing the value of this BigNumber in exponential notation and
* rounded using ROUNDING_MODE to dp fixed decimal places.
*
* [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
* [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
*/
P.toExponential = function (dp, rm) {
if (dp != null) {
intCheck(dp, 0, MAX);
dp++;
}
return format(this, dp, rm, 1);
};
/*
* Return a string representing the value of this BigNumber in fixed-point notation rounding
* to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.
*
* Note: as with JavaScript's number type, (-0).toFixed(0) is '0',
* but e.g. (-0.00001).toFixed(0) is '-0'.
*
* [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
* [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
*/
P.toFixed = function (dp, rm) {
if (dp != null) {
intCheck(dp, 0, MAX);
dp = dp + this.e + 1;
}
return format(this, dp, rm);
};
/*
* Return a string representing the value of this BigNumber in fixed-point notation rounded
* using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties
* of the format or FORMAT object (see BigNumber.set).
*
* The formatting object may contain some or all of the properties shown below.
*
* FORMAT = {
* prefix: '',
* groupSize: 3,
* secondaryGroupSize: 0,
* groupSeparator: ',',
* decimalSeparator: '.',
* fractionGroupSize: 0,
* fractionGroupSeparator: '\xA0', // non-breaking space
* suffix: ''
* };
*
* [dp] {number} Decimal places. Integer, 0 to MAX inclusive.
* [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
* [format] {object} Formatting options. See FORMAT pbject above.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'
* '[BigNumber Error] Argument not an object: {format}'
*/
P.toFormat = function (dp, rm, format) {
var str,
x = this;
if (format == null) {
if (dp != null && rm && typeof rm == 'object') {
format = rm;
rm = null;
} else if (dp && typeof dp == 'object') {
format = dp;
dp = rm = null;
} else {
format = FORMAT;
}
} else if (typeof format != 'object') {
throw Error(bignumberError + 'Argument not an object: ' + format);
}
str = x.toFixed(dp, rm);
if (x.c) {
var i,
arr = str.split('.'),
g1 = +format.groupSize,
g2 = +format.secondaryGroupSize,
groupSeparator = format.groupSeparator || '',
intPart = arr[0],
fractionPart = arr[1],
isNeg = x.s < 0,
intDigits = isNeg ? intPart.slice(1) : intPart,
len = intDigits.length;
if (g2) i = g1, g1 = g2, g2 = i, len -= i;
if (g1 > 0 && len > 0) {
i = len % g1 || g1;
intPart = intDigits.substr(0, i);
for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);
if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);
if (isNeg) intPart = '-' + intPart;
}
str = fractionPart ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize) ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'), '$&' + (format.fractionGroupSeparator || '')) : fractionPart) : intPart;
}
return (format.prefix || '') + str + (format.suffix || '');
};
/*
* Return an array of two BigNumbers representing the value of this BigNumber as a simple
* fraction with an integer numerator and an integer denominator.
* The denominator will be a positive non-zero value less than or equal to the specified
* maximum denominator. If a maximum denominator is not specified, the denominator will be
* the lowest value necessary to represent the number exactly.
*
* [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.
*
* '[BigNumber Error] Argument {not an integer|out of range} : {md}'
*/
P.toFraction = function (md) {
var d,
d0,
d1,
d2,
e,
exp,
n,
n0,
n1,
q,
r,
s,
x = this,
xc = x.c;
if (md != null) {
n = new BigNumber(md); // Throw if md is less than one or is not an integer, unless it is Infinity.
if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {
throw Error(bignumberError + 'Argument ' + (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));
}
}
if (!xc) return new BigNumber(x);
d = new BigNumber(ONE);
n1 = d0 = new BigNumber(ONE);
d1 = n0 = new BigNumber(ONE);
s = coeffToString(xc); // Determine initial denominator.
// d is a power of 10 and the minimum max denominator that specifies the value exactly.
e = d.e = s.length - x.e - 1;
d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];
md = !md || n.comparedTo(d) > 0 ? e > 0 ? d : n1 : n;
exp = MAX_EXP;
MAX_EXP = 1 / 0;
n = new BigNumber(s); // n0 = d1 = 0
n0.c[0] = 0;
for (;;) {
q = div(n, d, 0, 1);
d2 = d0.plus(q.times(d1));
if (d2.comparedTo(md) == 1) break;
d0 = d1;
d1 = d2;
n1 = n0.plus(q.times(d2 = n1));
n0 = d2;
d = n.minus(q.times(d2 = d));
n = d2;
}
d2 = div(md.minus(d0), d1, 0, 1);
n0 = n0.plus(d2.times(n1));
d0 = d0.plus(d2.times(d1));
n0.s = n1.s = x.s;
e = e * 2; // Determine which fraction is closer to x, n0/d0 or n1/d1
r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];
MAX_EXP = exp;
return r;
};
/*
* Return the value of this BigNumber converted to a number primitive.
*/
P.toNumber = function () {
return +valueOf(this);
};
/*
* Return a string representing the value of this BigNumber rounded to sd significant digits
* using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits
* necessary to represent the integer part of the value in fixed-point notation, then use
* exponential notation.
*
* [sd] {number} Significant digits. Integer, 1 to MAX inclusive.
* [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.
*
* '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'
*/
P.toPrecision = function (sd, rm) {
if (sd != null) intCheck(sd, 1, MAX);
return format(this, sd, rm, 2);
};
/*
* Return a string representing the value of this BigNumber in base b, or base 10 if b is
* omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and
* ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent
* that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than
* TO_EXP_NEG, return exponential notation.
*
* [b] {number} Integer, 2 to ALPHABET.length inclusive.
*
* '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'
*/
P.toString = function (b) {
var str,
n = this,
s = n.s,
e = n.e; // Infinity or NaN?
if (e === null) {
if (s) {
str = 'Infinity';
if (s < 0) str = '-' + str;
} else {
str = 'NaN';
}
} else {
if (b == null) {
str = e <= TO_EXP_NEG || e >= TO_EXP_POS ? toExponential(coeffToString(n.c), e) : toFixedPoint(coeffToString(n.c), e, '0');
} else if (b === 10) {
n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);
str = toFixedPoint(coeffToString(n.c), n.e, '0');
} else {
intCheck(b, 2, ALPHABET.length, 'Base');
str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);
}
if (s < 0 && n.c[0]) str = '-' + str;
}
return str;
};
/*
* Return as toString, but do not accept a base argument, and include the minus sign for
* negative zero.
*/
P.valueOf = P.toJSON = function () {
return valueOf(this);
};
P._isBigNumber = true;
if (configObject != null) BigNumber.set(configObject);
return BigNumber;
} // PRIVATE HELPER FUNCTIONS
// These functions don't need access to variables,
// e.g. DECIMAL_PLACES, in the scope of the `clone` function above.
function bitFloor(n) {
var i = n | 0;
return n > 0 || n === i ? i : i - 1;
} // Return a coefficient array as a string of base 10 digits.
function coeffToString(a) {
var s,
z,
i = 1,
j = a.length,
r = a[0] + '';
for (; i < j;) {
s = a[i++] + '';
z = LOG_BASE - s.length;
for (; z--; s = '0' + s);
r += s;
} // Determine trailing zeros.
for (j = r.length; r.charCodeAt(--j) === 48;);
return r.slice(0, j + 1 || 1);
} // Compare the value of BigNumbers x and y.
function compare(x, y) {
var a,
b,
xc = x.c,
yc = y.c,
i = x.s,
j = y.s,
k = x.e,
l = y.e; // Either NaN?
if (!i || !j) return null;
a = xc && !xc[0];
b = yc && !yc[0]; // Either zero?
if (a || b) return a ? b ? 0 : -j : i; // Signs differ?
if (i != j) return i;
a = i < 0;
b = k == l; // Either Infinity?
if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1; // Compare exponents.
if (!b) return k > l ^ a ? 1 : -1;
j = (k = xc.length) < (l = yc.length) ? k : l; // Compare digit by digit.
for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1; // Compare lengths.
return k == l ? 0 : k > l ^ a ? 1 : -1;
}
/*
* Check that n is a primitive number, an integer, and in range, otherwise throw.
*/
function intCheck(n, min, max, name) {
if (n < min || n > max || n !== mathfloor(n)) {
throw Error(bignumberError + (name || 'Argument') + (typeof n == 'number' ? n < min || n > max ? ' out of range: ' : ' not an integer: ' : ' not a primitive number: ') + String(n));
}
} // Assumes finite n.
function isOdd(n) {
var k = n.c.length - 1;
return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;
}
function toExponential(str, e) {
return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) + (e < 0 ? 'e' : 'e+') + e;
}
function toFixedPoint(str, e, z) {
var len, zs; // Negative exponent?
if (e < 0) {
// Prepend zeros.
for (zs = z + '.'; ++e; zs += z);
str = zs + str; // Positive exponent
} else {
len = str.length; // Append zeros.
if (++e > len) {
for (zs = z, e -= len; --e; zs += z);
str += zs;
} else if (e < len) {
str = str.slice(0, e) + '.' + str.slice(e);
}
}
return str;
} // EXPORT
BigNumber = clone();
BigNumber['default'] = BigNumber.BigNumber = BigNumber; // AMD.
if (true) {
!(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {
return BigNumber;
}).call(exports, __webpack_require__, exports, module),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // Node.js and other environments that support module.exports.
} else {}
})(void 0);
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
const Bignumber = __webpack_require__(1).BigNumber;
exports.MT = {
POS_INT: 0,
NEG_INT: 1,
BYTE_STRING: 2,
UTF8_STRING: 3,
ARRAY: 4,
MAP: 5,
TAG: 6,
SIMPLE_FLOAT: 7
};
exports.TAG = {
DATE_STRING: 0,
DATE_EPOCH: 1,
POS_BIGINT: 2,
NEG_BIGINT: 3,
DECIMAL_FRAC: 4,
BIGFLOAT: 5,
BASE64URL_EXPECTED: 21,
BASE64_EXPECTED: 22,
BASE16_EXPECTED: 23,
CBOR: 24,
URI: 32,
BASE64URL: 33,
BASE64: 34,
REGEXP: 35,
MIME: 36
};
exports.NUMBYTES = {
ZERO: 0,
ONE: 24,
TWO: 25,
FOUR: 26,
EIGHT: 27,
INDEFINITE: 31
};
exports.SIMPLE = {
FALSE: 20,
TRUE: 21,
NULL: 22,
UNDEFINED: 23
};
exports.SYMS = {
NULL: Symbol('null'),
UNDEFINED: Symbol('undef'),
PARENT: Symbol('parent'),
BREAK: Symbol('break'),
STREAM: Symbol('stream')
};
exports.SHIFT32 = Math.pow(2, 32);
exports.SHIFT16 = Math.pow(2, 16);
exports.MAX_SAFE_HIGH = 0x1fffff;
exports.NEG_ONE = new Bignumber(-1);
exports.TEN = new Bignumber(10);
exports.TWO = new Bignumber(2);
exports.PARENT = {
ARRAY: 0,
OBJECT: 1,
MAP: 2,
TAG: 3,
BYTE_STRING: 4,
UTF8_STRING: 5
};
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
const {
Buffer
} = __webpack_require__(0);
const Bignumber = __webpack_require__(1).BigNumber;
const constants = __webpack_require__(2);
const SHIFT32 = constants.SHIFT32;
const SHIFT16 = constants.SHIFT16;
const MAX_SAFE_HIGH = 0x1fffff;
exports.parseHalf = function parseHalf(buf) {
var exp, mant, sign;
sign = buf[0] & 0x80 ? -1 : 1;
exp = (buf[0] & 0x7C) >> 2;
mant = (buf[0] & 0x03) << 8 | buf[1];
if (!exp) {
return sign * 5.9604644775390625e-8 * mant;
} else if (exp === 0x1f) {
return sign * (mant ? 0 / 0 : 2e308);
} else {
return sign * Math.pow(2, exp - 25) * (1024 + mant);
}
};
function toHex(n) {
if (n < 16) {
return '0' + n.toString(16);
}
return n.toString(16);
}
exports.arrayBufferToBignumber = function (buf) {
const len = buf.byteLength;
let res = '';
for (let i = 0; i < len; i++) {
res += toHex(buf[i]);
}
return new Bignumber(res, 16);
}; // convert an Object into a Map
exports.buildMap = obj => {
const res = new Map();
const keys = Object.keys(obj);
const length = keys.length;
for (let i = 0; i < length; i++) {
res.set(keys[i], obj[keys[i]]);
}
return res;
};
exports.buildInt32 = (f, g) => {
return f * SHIFT16 + g;
};
exports.buildInt64 = (f1, f2, g1, g2) => {
const f = exports.buildInt32(f1, f2);
const g = exports.buildInt32(g1, g2);
if (f > MAX_SAFE_HIGH) {
return new Bignumber(f).times(SHIFT32).plus(g);
} else {
return f * SHIFT32 + g;
}
};
exports.writeHalf = function writeHalf(buf, half) {
// assume 0, -0, NaN, Infinity, and -Infinity have already been caught
// HACK: everyone settle in. This isn't going to be pretty.
// Translate cn-cbor's C code (from Carsten Borman):
// uint32_t be32;
// uint16_t be16, u16;
// union {
// float f;
// uint32_t u;
// } u32;
// u32.f = float_val;
const u32 = Buffer.allocUnsafe(4);
u32.writeFloatBE(half, 0);
const u = u32.readUInt32BE(0); // if ((u32.u & 0x1FFF) == 0) { /* worth trying half */
// hildjj: If the lower 13 bits are 0, we won't lose anything in the conversion
if ((u & 0x1FFF) !== 0) {
return false;
} // int s16 = (u32.u >> 16) & 0x8000;
// int exp = (u32.u >> 23) & 0xff;
// int mant = u32.u & 0x7fffff;
var s16 = u >> 16 & 0x8000; // top bit is sign
const exp = u >> 23 & 0xff; // then 5 bits of exponent
const mant = u & 0x7fffff; // if (exp == 0 && mant == 0)
// ; /* 0.0, -0.0 */
// hildjj: zeros already handled. Assert if you don't believe me.
// else if (exp >= 113 && exp <= 142) /* normalized */
// s16 += ((exp - 112) << 10) + (mant >> 13);
if (exp >= 113 && exp <= 142) {
s16 += (exp - 112 << 10) + (mant >> 13); // else if (exp >= 103 && exp < 113) { /* denorm, exp16 = 0 */
// if (mant & ((1 << (126 - exp)) - 1))
// goto float32; /* loss of precision */
// s16 += ((mant + 0x800000) >> (126 - exp));
} else if (exp >= 103 && exp < 113) {
if (mant & (1 << 126 - exp) - 1) {
return false;
}
s16 += mant + 0x800000 >> 126 - exp; // } else if (exp == 255 && mant == 0) { /* Inf */
// s16 += 0x7c00;
// hildjj: Infinity already handled
// } else
// goto float32; /* loss of range */
} else {
return false;
} // ensure_writable(3);
// u16 = s16;
// be16 = hton16p((const uint8_t*)&u16);
buf.writeUInt16BE(s16, 0);
return true;
};
exports.keySorter = function (a, b) {
var lenA = a[0].byteLength;
var lenB = b[0].byteLength;
if (lenA > lenB) {
return 1;
}
if (lenB > lenA) {
return -1;
}
return a[0].compare(b[0]);
}; // Adapted from http://www.2ality.com/2012/03/signedzero.html
exports.isNegativeZero = x => {
return x === 0 && 1 / x < 0;
};
exports.nextPowerOf2 = n => {
let count = 0; // First n in the below condition is for
// the case where n is 0
if (n && !(n & n - 1)) {
return n;
}
while (n !== 0) {
n >>= 1;
count += 1;
}
return 1 << count;
};
/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var g; // This works in non-strict mode
g = function () {
return this;
}();
try {
// This works if eval is allowed (see CSP)
g = g || new Function("return this")();
} catch (e) {
// This works if the window reference is available
if (typeof window === "object") g = window;
} // g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
module.exports = g;
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
var e, m;
var eLen = nBytes * 8 - mLen - 1;
var eMax = (1 << eLen) - 1;
var eBias = eMax >> 1;
var nBits = -7;
var i = isLE ? nBytes - 1 : 0;
var d = isLE ? -1 : 1;
var s = buffer[offset + i];
i += d;
e = s & (1 << -nBits) - 1;
s >>= -nBits;
nBits += eLen;
for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
m = e & (1 << -nBits) - 1;
e >>= -nBits;
nBits += mLen;
for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
if (e === 0) {
e = 1 - eBias;
} else if (e === eMax) {
return m ? NaN : (s ? -1 : 1) * Infinity;
} else {
m = m + Math.pow(2, mLen);
e = e - eBias;
}
return (s ? -1 : 1) * m * Math.pow(2, e - mLen);
};
exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
var e, m, c;
var eLen = nBytes * 8 - mLen - 1;
var eMax = (1 << eLen) - 1;
var eBias = eMax >> 1;
var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
var i = isLE ? 0 : nBytes - 1;
var d = isLE ? 1 : -1;
var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
value = Math.abs(value);
if (isNaN(value) || value === Infinity) {
m = isNaN(value) ? 1 : 0;
e = eMax;
} else {
e = Math.floor(Math.log(value) / Math.LN2);
if (value * (c = Math.pow(2, -e)) < 1) {
e--;
c *= 2;
}
if (e + eBias >= 1) {
value += rt / c;
} else {
value += rt * Math.pow(2, 1 - eBias);
}
if (value * c >= 2) {
e++;
c /= 2;
}
if (e + eBias >= eMax) {
m = 0;
e = eMax;
} else if (e + eBias >= 1) {
m = (value * c - 1) * Math.pow(2, mLen);
e = e + eBias;
} else {
m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
e = 0;
}
}
for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
e = e << mLen | m;
eLen += mLen;
for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
buffer[offset + i - d] |= s * 128;
};
/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(global) {
const {
Buffer
} = __webpack_require__(0);
const ieee754 = __webpack_require__(5);
const Bignumber = __webpack_require__(1).BigNumber;
const parser = __webpack_require__(16);
const utils = __webpack_require__(3);
const c = __webpack_require__(2);
const Simple = __webpack_require__(7);
const Tagged = __webpack_require__(8);
const {
URL
} = __webpack_require__(9);
/**
* Transform binary cbor data into JavaScript objects.
*/
class Decoder {
/**
* @param {Object} [opts={}]
* @param {number} [opts.size=65536] - Size of the allocated heap.
*/
constructor(opts) {
opts = opts || {};
if (!opts.size || opts.size < 0x10000) {
opts.size = 0x10000;
} else {
// Ensure the size is a power of 2
opts.size = utils.nextPowerOf2(opts.size);
} // Heap use to share the input with the parser
this._heap = new ArrayBuffer(opts.size);
this._heap8 = new Uint8Array(this._heap);
this._buffer = Buffer.from(this._heap);
this._reset(); // Known tags
this._knownTags = Object.assign({
0: val => new Date(val),
1: val => new Date(val * 1000),
2: val => utils.arrayBufferToBignumber(val),
3: val => c.NEG_ONE.minus(utils.arrayBufferToBignumber(val)),
4: v => {
// const v = new Uint8Array(val)
return c.TEN.pow(v[0]).times(v[1]);
},
5: v => {
// const v = new Uint8Array(val)
return c.TWO.pow(v[0]).times(v[1]);
},
32: val => new URL(val),
35: val => new RegExp(val)
}, opts.tags); // Initialize asm based parser
this.parser = parser(global, {
// eslint-disable-next-line no-console
log: console.log.bind(console),
pushInt: this.pushInt.bind(this),
pushInt32: this.pushInt32.bind(this),
pushInt32Neg: this.pushInt32Neg.bind(this),
pushInt64: this.pushInt64.bind(this),
pushInt64Neg: this.pushInt64Neg.bind(this),
pushFloat: this.pushFloat.bind(this),
pushFloatSingle: this.pushFloatSingle.bind(this),
pushFloatDouble: this.pushFloatDouble.bind(this),
pushTrue: this.pushTrue.bind(this),
pushFalse: this.pushFalse.bind(this),
pushUndefined: this.pushUndefined.bind(this),
pushNull: this.pushNull.bind(this),
pushInfinity: this.pushInfinity.bind(this),
pushInfinityNeg: this.pushInfinityNeg.bind(this),
pushNaN: this.pushNaN.bind(this),
pushNaNNeg: this.pushNaNNeg.bind(this),
pushArrayStart: this.pushArrayStart.bind(this),
pushArrayStartFixed: this.pushArrayStartFixed.bind(this),
pushArrayStartFixed32: this.pushArrayStartFixed32.bind(this),
pushArrayStartFixed64: this.pushArrayStartFixed64.bind(this),
pushObjectStart: this.pushObjectStart.bind(this),
pushObjectStartFixed: this.pushObjectStartFixed.bind(this),
pushObjectStartFixed32: this.pushObjectStartFixed32.bind(this),
pushObjectStartFixed64: this.pushObjectStartFixed64.bind(this),
pushByteString: this.pushByteString.bind(this),
pushByteStringStart: this.pushByteStringStart.bind(this),
pushUtf8String: this.pushUtf8String.bind(this),
pushUtf8StringStart: this.pushUtf8StringStart.bind(this),
pushSimpleUnassigned: this.pushSimpleUnassigned.bind(this),
pushTagUnassigned: this.pushTagUnassigned.bind(this),
pushTagStart: this.pushTagStart.bind(this),
pushTagStart4: this.pushTagStart4.bind(this),
pushTagStart8: this.pushTagStart8.bind(this),
pushBreak: this.pushBreak.bind(this)
}, this._heap);
}
get _depth() {
return this._parents.length;
}
get _currentParent() {
return this._parents[this._depth - 1];
}
get _ref() {
return this._currentParent.ref;
} // Finish the current parent
_closeParent() {
var p = this._parents.pop();
if (p.length > 0) {
throw new Error("Missing ".concat(p.length, " elements"));
}
switch (p.type) {
case c.PARENT.TAG:
this._push(this.createTag(p.ref[0], p.ref[1]));
break;
case c.PARENT.BYTE_STRING:
this._push(this.createByteString(p.ref, p.length));
break;
case c.PARENT.UTF8_STRING:
this._push(this.createUtf8String(p.ref, p.length));
break;
case c.PARENT.MAP:
if (p.values % 2 > 0) {
throw new Error('Odd number of elements in the map');
}
this._push(this.createMap(p.ref, p.length));
break;
case c.PARENT.OBJECT:
if (p.values % 2 > 0) {
throw new Error('Odd number of elements in the map');
}
this._push(this.createObject(p.ref, p.length));
break;
case c.PARENT.ARRAY:
this._push(this.createArray(p.ref, p.length));
break;
default:
break;
}
if (this._currentParent && this._currentParent.type === c.PARENT.TAG) {
this._dec();
}
} // Reduce the expected length of the current parent by one
_dec() {
const p = this._currentParent; // The current parent does not know the epxected child length
if (p.length < 0) {
return;
}
p.length--; // All children were seen, we can close the current parent
if (p.length === 0) {
this._closeParent();
}
} // Push any value to the current parent
_push(val, hasChildren) {
const p = this._currentParent;
p.values++;
switch (p.type) {
case c.PARENT.ARRAY:
case c.PARENT.BYTE_STRING:
case c.PARENT.UTF8_STRING:
if (p.length > -1) {
this._ref[this._ref.length - p.length] = val;
} else {
this._ref.push(val);
}
this._dec();
break;
case c.PARENT.OBJECT:
if (p.tmpKey != null) {
this._ref[p.tmpKey] = val;
p.tmpKey = null;
this._dec();
} else {
p.tmpKey = val;
if (typeof p.tmpKey !== 'string') {
// too bad, convert to a Map
p.type = c.PARENT.MAP;
p.ref = utils.buildMap(p.ref);
}
}
break;
case c.PARENT.MAP:
if (p.tmpKey != null) {
this._ref.set(p.tmpKey, val);
p.tmpKey = null;
this._dec();
} else {
p.tmpKey = val;
}
break;
case c.PARENT.TAG:
this._ref.push(val);
if (!hasChildren) {
this._dec();
}
break;
default:
throw new Error('Unknown parent type');
}
} // Create a new parent in the parents list
_createParent(obj, type, len) {
this._parents[this._depth] = {
type: type,
length: len,
ref: obj,
values: 0,
tmpKey: null
};
} // Reset all state back to the beginning, also used for initiatlization
_reset() {
this._res = [];
this._parents = [{
type: c.PARENT.ARRAY,
length: -1,
ref: this._res,
values: 0,
tmpKey: null
}];
} // -- Interface to customize deoding behaviour
createTag(tagNumber, value) {
const typ = this._knownTags[tagNumber];
if (!typ) {
return new Tagged(tagNumber, value);
}
return typ(value);
}
createMap(obj, len) {
return obj;
}
createObject(obj, len) {
return obj;
}
createArray(arr, len) {
return arr;
}
createByteString(raw, len) {
return Buffer.concat(raw);
}
createByteStringFromHeap(start, end) {
if (start === end) {
return Buffer.alloc(0);
}
return Buffer.from(this._heap.slice(start, end));
}
createInt(val) {
return val;
}
createInt32(f, g) {
return utils.buildInt32(f, g);
}
createInt64(f1, f2, g1, g2) {
return utils.buildInt64(f1, f2, g1, g2);
}
createFloat(val) {
return val;
}
createFloatSingle(a, b, c, d) {
return ieee754.read([a, b, c, d], 0, false, 23, 4);
}
createFloatDouble(a, b, c, d, e, f, g, h) {
return ieee754.read([a, b, c, d, e, f, g, h], 0, false, 52, 8);
}
createInt32Neg(f, g) {
return -1 - utils.buildInt32(f, g);
}
createInt64Neg(f1, f2, g1, g2) {
const f = utils.buildInt32(f1, f2);
const g = utils.buildInt32(g1, g2);
if (f > c.MAX_SAFE_HIGH) {
return c.NEG_ONE.minus(new Bignumber(f).times(c.SHIFT32).plus(g));
}
return -1 - (f * c.SHIFT32 + g);
}
createTrue() {
return true;
}
createFalse() {
return false;
}
createNull() {
return null;
}
createUndefined() {
return undefined;
}
createInfinity() {
return Infinity;
}
createInfinityNeg() {
return -Infinity;
}
createNaN() {
return NaN;
}
createNaNNeg() {
return -NaN;
}
createUtf8String(raw, len) {
return raw.join('');
}
createUtf8StringFromHeap(start, end) {
if (start === end) {
return '';
}
return this._buffer.toString('utf8', start, end);
}
createSimpleUnassigned(val) {
return new Simple(val);
} // -- Interface for decoder.asm.js
pushInt(val) {
this._push(this.createInt(val));
}
pushInt32(f, g) {
this._push(this.createInt32(f, g));
}
pushInt64(f1, f2, g1, g2) {
this._push(this.createInt64(f1, f2, g1, g2));
}
pushFloat(val) {
this._push(this.createFloat(val));
}
pushFloatSingle(a, b, c, d) {
this._push(this.createFloatSingle(a, b, c, d));
}
pushFloatDouble(a, b, c, d, e, f, g, h) {
this._push(this.createFloatDouble(a, b, c, d, e, f, g, h));
}
pushInt32Neg(f, g) {
this._push(this.createInt32Neg(f, g));
}
pushInt64Neg(f1, f2, g1, g2) {
this._push(this.createInt64Neg(f1, f2, g1, g2));
}
pushTrue() {
this._push(this.createTrue());
}
pushFalse() {
this._push(this.createFalse());
}
pushNull() {
this._push(this.createNull());
}
pushUndefined() {
this._push(this.createUndefined());
}
pushInfinity() {
this._push(this.createInfinity());
}
pushInfinityNeg() {
this._push(this.createInfinityNeg());
}
pushNaN() {
this._push(this.createNaN());
}
pushNaNNeg() {
this._push(this.createNaNNeg());
}
pushArrayStart() {
this._createParent([], c.PARENT.ARRAY, -1);
}
pushArrayStartFixed(len) {
this._createArrayStartFixed(len);
}
pushArrayStartFixed32(len1, len2) {
const len = utils.buildInt32(len1, len2);
this._createArrayStartFixed(len);
}
pushArrayStartFixed64(len1, len2, len3, len4) {
const len = utils.buildInt64(len1, len2, len3, len4);
this._createArrayStartFixed(len);
}
pushObjectStart() {
this._createObjectStartFixed(-1);
}
pushObjectStartFixed(len) {
this._createObjectStartFixed(len);
}
pushObjectStartFixed32(len1, len2) {
const len = utils.buildInt32(len1, len2);
this._createObjectStartFixed(len);
}
pushObjectStartFixed64(len1, len2, len3, len4) {
const len = utils.buildInt64(len1, len2, len3, len4);
this._createObjectStartFixed(len);
}
pushByteStringStart() {
this._parents[this._depth] = {
type: c.PARENT.BYTE_STRING,
length: -1,
ref: [],
values: 0,
tmpKey: null
};
}
pushByteString(start, end) {
this._push(this.createByteStringFromHeap(start, end));
}
pushUtf8StringStart() {
this._parents[this._depth] = {
type: c.PARENT.UTF8_STRING,
length: -1,
ref: [],
values: 0,
tmpKey: null
};
}
pushUtf8String(start, end) {
this._push(this.createUtf8StringFromHeap(start, end));
}
pushSimpleUnassigned(val) {
this._push(this.createSimpleUnassigned(val));
}
pushTagStart(tag) {
this._parents[this._depth] = {
type: c.PARENT.TAG,
length: 1,
ref: [tag]
};
}
pushTagStart4(f, g) {
this.pushTagStart(utils.buildInt32(f, g));
}
pushTagStart8(f1, f2, g1, g2) {
this.pushTagStart(utils.buildInt64(f1, f2, g1, g2));
}
pushTagUnassigned(tagNumber) {
this._push(this.createTag(tagNumber));
}
pushBreak() {
if (this._currentParent.length > -1) {
throw new Error('Unexpected break');
}
this._closeParent();
}
_createObjectStartFixed(len) {
if (len === 0) {
this._push(this.createObject({}));
return;
}
this._createParent({}, c.PARENT.OBJECT, len);
}
_createArrayStartFixed(len) {
if (len === 0) {
this._push(this.createArray([]));
return;
}
this._createParent(new Array(len), c.PARENT.ARRAY, len);
}
_decode(input) {
if (input.byteLength === 0) {
throw new Error('Input too short');
}
this._reset();
this._heap8.set(input);
const code = this.parser.parse(input.byteLength);
if (this._depth > 1) {
while (this._currentParent.length === 0) {
this._closeParent();
}
if (this._depth > 1) {
throw new Error('Undeterminated nesting');
}
}
if (code > 0) {
throw new Error('Failed to parse');
}
if (this._res.length === 0) {
throw new Error('No valid result');
}
} // -- Public Interface
decodeFirst(input) {
this._decode(input);
return this._res[0];
}
decodeAll(input) {
this._decode(input);
return this._res;
}
/**
* Decode the first cbor object.
*
* @param {Buffer|string} input
* @param {string} [enc='hex'] - Encoding used if a string is passed.
* @returns {*}
*/
static decode(input, enc) {
if (typeof input === 'string') {
input = Buffer.from(input, enc || 'hex');
}
const dec = new Decoder({
size: input.length
});
return dec.decodeFirst(input);
}
/**
* Decode all cbor objects.
*
* @param {Buffer|string} input
* @param {string} [enc='hex'] - Encoding used if a string is passed.
* @returns {Array<*>}
*/
static decodeAll(input, enc) {
if (typeof input === 'string') {
input = Buffer.from(input, enc || 'hex');
}
const dec = new Decoder({
size: input.length
});
return dec.decodeAll(input);
}
}
Decoder.decodeFirst = Decoder.decode;
module.exports = Decoder;
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(4)))
/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
const constants = __webpack_require__(2);
const MT = constants.MT;
const SIMPLE = constants.SIMPLE;
const SYMS = constants.SYMS;
/**
* A CBOR Simple Value that does not map onto a known constant.
*/
class Simple {
/**
* Creates an instance of Simple.
*
* @param {integer} value - the simple value's integer value
*/
constructor(value) {
if (typeof value !== 'number') {
throw new Error('Invalid Simple type: ' + typeof value);
}
if (value < 0 || value > 255 || (value | 0) !== value) {
throw new Error('value must be a small positive integer: ' + value);
}
this.value = value;
}
/**
* Debug string for simple value
*
* @returns {string} simple(value)
*/
toString() {
return 'simple(' + this.value + ')';
}
/**
* Debug string for simple value
*
* @returns {string} simple(value)
*/
inspect() {
return 'simple(' + this.value + ')';
}
/**
* Push the simple value onto the CBOR stream
*
* @param {cbor.Encoder} gen The generator to push onto
* @returns {number}
*/
encodeCBOR(gen) {
return gen._pushInt(this.value, MT.SIMPLE_FLOAT);
}
/**
* Is the given object a Simple?
*
* @param {any} obj - object to test
* @returns {bool} - is it Simple?
*/
static isSimple(obj) {
return obj instanceof Simple;
}
/**
* Decode from the CBOR additional information into a JavaScript value.
* If the CBOR item has no parent, return a "safe" symbol instead of
* `null` or `undefined`, so that the value can be passed through a
* stream in object mode.
*
* @param {Number} val - the CBOR additional info to convert
* @param {bool} hasParent - Does the CBOR item have a parent?
* @returns {(null|undefined|Boolean|Symbol)} - the decoded value
*/
static decode(val, hasParent) {
if (hasParent == null) {
hasParent = true;
}
switch (val) {
case SIMPLE.FALSE:
return false;
case SIMPLE.TRUE:
return true;
case SIMPLE.NULL:
if (hasParent) {
return null;
} else {
return SYMS.NULL;
}
case SIMPLE.UNDEFINED:
if (hasParent) {
return undefined;
} else {
return SYMS.UNDEFINED;
}
case -1:
if (!hasParent) {
throw new Error('Invalid BREAK');
}
return SYMS.BREAK;
default:
return new Simple(val);
}
}
}
module.exports = Simple;
/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* A CBOR tagged item, where the tag does not have semantics specified at the
* moment, or those semantics threw an error during parsing. Typically this will
* be an extension point you're not yet expecting.
*/
class Tagged {
/**
* Creates an instance of Tagged.
*
* @param {Number} tag - the number of the tag
* @param {any} value - the value inside the tag
* @param {Error} err - the error that was thrown parsing the tag, or null
*/
constructor(tag, value, err) {
this.tag = tag;
this.value = value;
this.err = err;
if (typeof this.tag !== 'number') {
throw new Error('Invalid tag type (' + typeof this.tag + ')');
}
if (this.tag < 0 || (this.tag | 0) !== this.tag) {
throw new Error('Tag must be a positive integer: ' + this.tag);
}
}
/**
* Convert to a String
*
* @returns {String} string of the form '1(2)'
*/
toString() {
return "".concat(this.tag, "(").concat(JSON.stringify(this.value), ")");
}
/**
* Push the simple value onto the CBOR stream
*
* @param {cbor.Encoder} gen The generator to push onto
* @returns {number}
*/
encodeCBOR(gen) {
gen._pushTag(this.tag);
return gen.pushAny(this.value);
}
/**
* If we have a converter for this type, do the conversion. Some converters
* are built-in. Additional ones can be passed in. If you want to remove
* a built-in converter, pass a converter in whose value is 'null' instead
* of a function.
*
* @param {Object} converters - keys in the object are a tag number, the value
* is a function that takes the decoded CBOR and returns a JavaScript value
* of the appropriate type. Throw an exception in the function on errors.
* @returns {any} - the converted item
*/
convert(converters) {
var er, f;
f = converters != null ? converters[this.tag] : undefined;
if (typeof f !== 'function') {
f = Tagged['_tag' + this.tag];
if (typeof f !== 'function') {
return this;
}
}
try {
return f.call(Tagged, this.value);
} catch (error) {
er = error;
this.err = er;
return this;
}
}
}
module.exports = Tagged;
/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
const {
URLWithLegacySupport,
format,
URLSearchParams,
defaultBase
} = __webpack_require__(10);
const relative = __webpack_require__(17);
module.exports = {
URL: URLWithLegacySupport,
URLSearchParams,
format,
relative,
defaultBase
};
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
const defaultBase = self.location ? self.location.protocol + '//' + self.location.host : '';
const URL = self.URL;
class URLWithLegacySupport {
constructor(url = '', base = defaultBase) {
this.super = new URL(url, base);
this.path = this.pathname + this.search;
this.auth = this.username && this.password ? this.username + ':' + this.password : null;
this.query = this.search && this.search.startsWith('?') ? this.search.slice(1) : null;
}
get hash() {
return this.super.hash;
}
get host() {
return this.super.host;
}
get hostname() {
return this.super.hostname;
}
get href() {
return this.super.href;
}
get origin() {
return this.super.origin;
}
get password() {
return this.super.password;
}
get pathname() {
return this.super.pathname;
}
get port() {
return this.super.port;
}
get protocol() {
return this.super.protocol;
}
get search() {
return this.super.search;
}
get searchParams() {
return this.super.searchParams;
}
get username() {
return this.super.username;
}
set hash(hash) {
this.super.hash = hash;
}
set host(host) {
this.super.host = host;
}
set hostname(hostname) {
this.super.hostname = hostname;
}
set href(href) {
this.super.href = href;
}
set origin(origin) {
this.super.origin = origin;
}
set password(password) {
this.super.password = password;
}
set pathname(pathname) {
this.super.pathname = pathname;
}
set port(port) {
this.super.port = port;
}
set protocol(protocol) {
this.super.protocol = protocol;
}
set search(search) {
this.super.search = search;
}
set searchParams(searchParams) {
this.super.searchParams = searchParams;
}
set username(username) {
this.super.username = username;
}
createObjectURL(o) {
return this.super.createObjectURL(o);
}
revokeObjectURL(o) {
this.super.revokeObjectURL(o);
}
toJSON() {
return this.super.toJSON();
}
toString() {
return this.super.toString();
}
format() {
return this.toString();
}
}
function format(obj) {
if (typeof obj === 'string') {
const url = new URL(obj);
return url.toString();
}
if (!(obj instanceof URL)) {
const userPass = obj.username && obj.password ? "".concat(obj.username, ":").concat(obj.password, "@") : '';
const auth = obj.auth ? obj.auth + '@' : '';
const port = obj.port ? ':' + obj.port : '';
const protocol = obj.protocol ? obj.protocol + '//' : '';
const host = obj.host || '';
const hostname = obj.hostname || '';
const search = obj.search || (obj.query ? '?' + obj.query : '');
const hash = obj.hash || '';
const pathname = obj.pathname || '';
const path = obj.path || pathname + search;
return "".concat(protocol).concat(userPass || auth).concat(host || hostname + port).concat(path).concat(hash);
}
}
module.exports = {
URLWithLegacySupport,
URLSearchParams: self.URLSearchParams,
defaultBase,
format
};
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(12);
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// exports.Commented = require('./commented')
exports.Diagnose = __webpack_require__(13);
exports.Decoder = __webpack_require__(6);
exports.Encoder = __webpack_require__(18);
exports.Simple = __webpack_require__(7);
exports.Tagged = __webpack_require__(8); // exports.comment = exports.Commented.comment
exports.decodeAll = exports.Decoder.decodeAll;
exports.decodeFirst = exports.Decoder.decodeFirst;
exports.diagnose = exports.Diagnose.diagnose;
exports.encode = exports.Encoder.encode;
exports.decode = exports.Decoder.decode;
exports.leveldb = {
decode: exports.Decoder.decodeAll,
encode: exports.Encoder.encode,
buffer: true,
name: 'cbor'
};
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
const {
Buffer
} = __webpack_require__(0);
const Decoder = __webpack_require__(6);
const utils = __webpack_require__(3);
/**
* Output the diagnostic format from a stream of CBOR bytes.
*
*/
class Diagnose extends Decoder {
createTag(tagNumber, value) {
return "".concat(tagNumber, "(").concat(value, ")");
}
createInt(val) {
return super.createInt(val).toString();
}
createInt32(f, g) {
return super.createInt32(f, g).toString();
}
createInt64(f1, f2, g1, g2) {
return super.createInt64(f1, f2, g1, g2).toString();
}
createInt32Neg(f, g) {
return super.createInt32Neg(f, g).toString();
}
createInt64Neg(f1, f2, g1, g2) {
return super.createInt64Neg(f1, f2, g1, g2).toString();
}
createTrue() {
return 'true';
}
createFalse() {
return 'false';
}
createFloat(val) {
const fl = super.createFloat(val);
if (utils.isNegativeZero(val)) {
return '-0_1';
}
return "".concat(fl, "_1");
}
createFloatSingle(a, b, c, d) {
const fl = super.createFloatSingle(a, b, c, d);
return "".concat(fl, "_2");
}
createFloatDouble(a, b, c, d, e, f, g, h) {
const fl = super.createFloatDouble(a, b, c, d, e, f, g, h);
return "".concat(fl, "_3");
}
createByteString(raw, len) {
const val = raw.join(', ');
if (len === -1) {
return "(_ ".concat(val, ")");
}
return "h'".concat(val);
}
createByteStringFromHeap(start, end) {
const val = Buffer.from(super.createByteStringFromHeap(start, end)).toString('hex');
return "h'".concat(val, "'");
}
createInfinity() {
return 'Infinity_1';
}
createInfinityNeg() {
return '-Infinity_1';
}
createNaN() {
return 'NaN_1';
}
createNaNNeg() {
return '-NaN_1';
}
createNull() {
return 'null';
}
createUndefined() {
return 'undefined';
}
createSimpleUnassigned(val) {
return "simple(".concat(val, ")");
}
createArray(arr, len) {
const val = super.createArray(arr, len);
if (len === -1) {
// indefinite
return "[_ ".concat(val.join(', '), "]");
}
return "[".concat(val.join(', '), "]");
}
createMap(map, len) {
const val = super.createMap(map);
const list = Array.from(val.keys()).reduce(collectObject(val), '');
if (len === -1) {
return "{_ ".concat(list, "}");
}
return "{".concat(list, "}");
}
createObject(obj, len) {
const val = super.createObject(obj);
const map = Object.keys(val).reduce(collectObject(val), '');
if (len === -1) {
return "{_ ".concat(map, "}");
}
return "{".concat(map, "}");
}
createUtf8String(raw, len) {
const val = raw.join(', ');
if (len === -1) {
return "(_ ".concat(val, ")");
}
return "\"".concat(val, "\"");
}
createUtf8StringFromHeap(start, end) {
const val = Buffer.from(super.createUtf8StringFromHeap(start, end)).toString('utf8');
return "\"".concat(val, "\"");
}
static diagnose(input, enc) {
if (typeof input === 'string') {
input = Buffer.from(input, enc || 'hex');
}
const dec = new Diagnose();
return dec.decodeFirst(input);
}
}
module.exports = Diagnose;
function collectObject(val) {
return (acc, key) => {
if (acc) {
return "".concat(acc, ", ").concat(key, ": ").concat(val[key]);
}
return "".concat(key, ": ").concat(val[key]);
};
}
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.byteLength = byteLength;
exports.toByteArray = toByteArray;
exports.fromByteArray = fromByteArray;
var lookup = [];
var revLookup = [];
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
for (var i = 0, len = code.length; i < len; ++i) {
lookup[i] = code[i];
revLookup[code.charCodeAt(i)] = i;
} // Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
revLookup['-'.charCodeAt(0)] = 62;
revLookup['_'.charCodeAt(0)] = 63;
function getLens(b64) {
var len = b64.length;
if (len % 4 > 0) {
throw new Error('Invalid string. Length must be a multiple of 4');
} // Trim off extra bytes after placeholder bytes are found
// See: https://github.com/beatgammit/base64-js/issues/42
var validLen = b64.indexOf('=');
if (validLen === -1) validLen = len;
var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;
return [validLen, placeHoldersLen];
} // base64 is 4/3 + up to two characters of the original data
function byteLength(b64) {
var lens = getLens(b64);
var validLen = lens[0];
var placeHoldersLen = lens[1];
return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
}
function _byteLength(b64, validLen, placeHoldersLen) {
return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;
}
function toByteArray(b64) {
var tmp;
var lens = getLens(b64);
var validLen = lens[0];
var placeHoldersLen = lens[1];
var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));
var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars
var len = placeHoldersLen > 0 ? validLen - 4 : validLen;
var i;
for (i = 0; i < len; i += 4) {
tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];
arr[curByte++] = tmp >> 16 & 0xFF;
arr[curByte++] = tmp >> 8 & 0xFF;
arr[curByte++] = tmp & 0xFF;
}
if (placeHoldersLen === 2) {
tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;
arr[curByte++] = tmp & 0xFF;
}
if (placeHoldersLen === 1) {
tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;
arr[curByte++] = tmp >> 8 & 0xFF;
arr[curByte++] = tmp & 0xFF;
}
return arr;
}
function tripletToBase64(num) {
return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];
}
function encodeChunk(uint8, start, end) {
var tmp;
var output = [];
for (var i = start; i < end; i += 3) {
tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);
output.push(tripletToBase64(tmp));
}
return output.join('');
}
function fromByteArray(uint8) {
var tmp;
var len = uint8.length;
var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
var parts = [];
var maxChunkLength = 16383; // must be multiple of 3
// go through the array every three bytes, we'll deal with trailing stuff later
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));
} // pad the end with zeros, but make sure to not forget the extra bytes
if (extraBytes === 1) {
tmp = uint8[len - 1];
parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');
} else if (extraBytes === 2) {
tmp = (uint8[len - 2] << 8) + uint8[len - 1];
parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');
}
return parts.join('');
}
/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var toString = {}.toString;
module.exports = Array.isArray || function (arr) {
return toString.call(arr) == '[object Array]';
};
/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* eslint-disable */
module.exports = function decodeAsm(stdlib, foreign, buffer) {
'use asm'; // -- Imports
var heap = new stdlib.Uint8Array(buffer); // var log = foreign.log
var pushInt = foreign.pushInt;
var pushInt32 = foreign.pushInt32;
var pushInt32Neg = foreign.pushInt32Neg;
var pushInt64 = foreign.pushInt64;
var pushInt64Neg = foreign.pushInt64Neg;
var pushFloat = foreign.pushFloat;
var pushFloatSingle = foreign.pushFloatSingle;
var pushFloatDouble = foreign.pushFloatDouble;
var pushTrue = foreign.pushTrue;
var pushFalse = foreign.pushFalse;
var pushUndefined = foreign.pushUndefined;
var pushNull = foreign.pushNull;
var pushInfinity = foreign.pushInfinity;
var pushInfinityNeg = foreign.pushInfinityNeg;
var pushNaN = foreign.pushNaN;
var pushNaNNeg = foreign.pushNaNNeg;
var pushArrayStart = foreign.pushArrayStart;
var pushArrayStartFixed = foreign.pushArrayStartFixed;
var pushArrayStartFixed32 = foreign.pushArrayStartFixed32;
var pushArrayStartFixed64 = foreign.pushArrayStartFixed64;
var pushObjectStart = foreign.pushObjectStart;
var pushObjectStartFixed = foreign.pushObjectStartFixed;
var pushObjectStartFixed32 = foreign.pushObjectStartFixed32;
var pushObjectStartFixed64 = foreign.pushObjectStartFixed64;
var pushByteString = foreign.pushByteString;
var pushByteStringStart = foreign.pushByteStringStart;
var pushUtf8String = foreign.pushUtf8String;
var pushUtf8StringStart = foreign.pushUtf8StringStart;
var pushSimpleUnassigned = foreign.pushSimpleUnassigned;
var pushTagStart = foreign.pushTagStart;
var pushTagStart4 = foreign.pushTagStart4;
var pushTagStart8 = foreign.pushTagStart8;
var pushTagUnassigned = foreign.pushTagUnassigned;
var pushBreak = foreign.pushBreak;
var pow = stdlib.Math.pow; // -- Constants
// -- Mutable Variables
var offset = 0;
var inputLength = 0;
var code = 0; // Decode a cbor string represented as Uint8Array
// which is allocated on the heap from 0 to inputLength
//
// input - Int
//
// Returns Code - Int,
// Success = 0
// Error > 0
function parse(input) {
input = input | 0;
offset = 0;
inputLength = input;
while ((offset | 0) < (inputLength | 0)) {
code = jumpTable[heap[offset] & 255](heap[offset] | 0) | 0;
if ((code | 0) > 0) {
break;
}
}
return code | 0;
} // -- Helper Function
function checkOffset(n) {
n = n | 0;
if (((offset | 0) + (n | 0) | 0) < (inputLength | 0)) {
return 0;
}
return 1;
}
function readUInt16(n) {
n = n | 0;
return heap[n | 0] << 8 | heap[n + 1 | 0] | 0;
}
function readUInt32(n) {
n = n | 0;
return heap[n | 0] << 24 | heap[n + 1 | 0] << 16 | heap[n + 2 | 0] << 8 | heap[n + 3 | 0] | 0;
} // -- Initial Byte Handlers
function INT_P(octet) {
octet = octet | 0;
pushInt(octet | 0);
offset = offset + 1 | 0;
return 0;
}
function UINT_P_8(octet) {
octet = octet | 0;
if (checkOffset(1) | 0) {
return 1;
}
pushInt(heap[offset + 1 | 0] | 0);
offset = offset + 2 | 0;
return 0;
}
function UINT_P_16(octet) {
octet = octet | 0;
if (checkOffset(2) | 0) {
return 1;
}
pushInt(readUInt16(offset + 1 | 0) | 0);
offset = offset + 3 | 0;
return 0;
}
function UINT_P_32(octet) {
octet = octet | 0;
if (checkOffset(4) | 0) {
return 1;
}
pushInt32(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0);
offset = offset + 5 | 0;
return 0;
}
function UINT_P_64(octet) {
octet = octet | 0;
if (checkOffset(8) | 0) {
return 1;
}
pushInt64(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0, readUInt16(offset + 5 | 0) | 0, readUInt16(offset + 7 | 0) | 0);
offset = offset + 9 | 0;
return 0;
}
function INT_N(octet) {
octet = octet | 0;
pushInt(-1 - (octet - 32 | 0) | 0);
offset = offset + 1 | 0;
return 0;
}
function UINT_N_8(octet) {
octet = octet | 0;
if (checkOffset(1) | 0) {
return 1;
}
pushInt(-1 - (heap[offset + 1 | 0] | 0) | 0);
offset = offset + 2 | 0;
return 0;
}
function UINT_N_16(octet) {
octet = octet | 0;
var val = 0;
if (checkOffset(2) | 0) {
return 1;
}
val = readUInt16(offset + 1 | 0) | 0;
pushInt(-1 - (val | 0) | 0);
offset = offset + 3 | 0;
return 0;
}
function UINT_N_32(octet) {
octet = octet | 0;
if (checkOffset(4) | 0) {
return 1;
}
pushInt32Neg(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0);
offset = offset + 5 | 0;
return 0;
}
function UINT_N_64(octet) {
octet = octet | 0;
if (checkOffset(8) | 0) {
return 1;
}
pushInt64Neg(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0, readUInt16(offset + 5 | 0) | 0, readUInt16(offset + 7 | 0) | 0);
offset = offset + 9 | 0;
return 0;
}
function BYTE_STRING(octet) {
octet = octet | 0;
var start = 0;
var end = 0;
var step = 0;
step = octet - 64 | 0;
if (checkOffset(step | 0) | 0) {
return 1;
}
start = offset + 1 | 0;
end = (offset + 1 | 0) + (step | 0) | 0;
pushByteString(start | 0, end | 0);
offset = end | 0;
return 0;
}
function BYTE_STRING_8(octet) {
octet = octet | 0;
var start = 0;
var end = 0;
var length = 0;
if (checkOffset(1) | 0) {
return 1;
}
length = heap[offset + 1 | 0] | 0;
start = offset + 2 | 0;
end = (offset + 2 | 0) + (length | 0) | 0;
if (checkOffset(length + 1 | 0) | 0) {
return 1;
}
pushByteString(start | 0, end | 0);
offset = end | 0;
return 0;
}
function BYTE_STRING_16(octet) {
octet = octet | 0;
var start = 0;
var end = 0;
var length = 0;
if (checkOffset(2) | 0) {
return 1;
}
length = readUInt16(offset + 1 | 0) | 0;
start = offset + 3 | 0;
end = (offset + 3 | 0) + (length | 0) | 0;
if (checkOffset(length + 2 | 0) | 0) {
return 1;
}
pushByteString(start | 0, end | 0);
offset = end | 0;
return 0;
}
function BYTE_STRING_32(octet) {
octet = octet | 0;
var start = 0;
var end = 0;
var length = 0;
if (checkOffset(4) | 0) {
return 1;
}
length = readUInt32(offset + 1 | 0) | 0;
start = offset + 5 | 0;
end = (offset + 5 | 0) + (length | 0) | 0;
if (checkOffset(length + 4 | 0) | 0) {
return 1;
}
pushByteString(start | 0, end | 0);
offset = end | 0;
return 0;
}
function BYTE_STRING_64(octet) {
// NOT IMPLEMENTED
octet = octet | 0;
return 1;
}
function BYTE_STRING_BREAK(octet) {
octet = octet | 0;
pushByteStringStart();
offset = offset + 1 | 0;
return 0;
}
function UTF8_STRING(octet) {
octet = octet | 0;
var start = 0;
var end = 0;
var step = 0;
step = octet - 96 | 0;
if (checkOffset(step | 0) | 0) {
return 1;
}
start = offset + 1 | 0;
end = (offset + 1 | 0) + (step | 0) | 0;
pushUtf8String(start | 0, end | 0);
offset = end | 0;
return 0;
}
function UTF8_STRING_8(octet) {
octet = octet | 0;
var start = 0;
var end = 0;
var length = 0;
if (checkOffset(1) | 0) {
return 1;
}
length = heap[offset + 1 | 0] | 0;
start = offset + 2 | 0;
end = (offset + 2 | 0) + (length | 0) | 0;
if (checkOffset(length + 1 | 0) | 0) {
return 1;
}
pushUtf8String(start | 0, end | 0);
offset = end | 0;
return 0;
}
function UTF8_STRING_16(octet) {
octet = octet | 0;
var start = 0;
var end = 0;
var length = 0;
if (checkOffset(2) | 0) {
return 1;
}
length = readUInt16(offset + 1 | 0) | 0;
start = offset + 3 | 0;
end = (offset + 3 | 0) + (length | 0) | 0;
if (checkOffset(length + 2 | 0) | 0) {
return 1;
}
pushUtf8String(start | 0, end | 0);
offset = end | 0;
return 0;
}
function UTF8_STRING_32(octet) {
octet = octet | 0;
var start = 0;
var end = 0;
var length = 0;
if (checkOffset(4) | 0) {
return 1;
}
length = readUInt32(offset + 1 | 0) | 0;
start = offset + 5 | 0;
end = (offset + 5 | 0) + (length | 0) | 0;
if (checkOffset(length + 4 | 0) | 0) {
return 1;
}
pushUtf8String(start | 0, end | 0);
offset = end | 0;
return 0;
}
function UTF8_STRING_64(octet) {
// NOT IMPLEMENTED
octet = octet | 0;
return 1;
}
function UTF8_STRING_BREAK(octet) {
octet = octet | 0;
pushUtf8StringStart();
offset = offset + 1 | 0;
return 0;
}
function ARRAY(octet) {
octet = octet | 0;
pushArrayStartFixed(octet - 128 | 0);
offset = offset + 1 | 0;
return 0;
}
function ARRAY_8(octet) {
octet = octet | 0;
if (checkOffset(1) | 0) {
return 1;
}
pushArrayStartFixed(heap[offset + 1 | 0] | 0);
offset = offset + 2 | 0;
return 0;
}
function ARRAY_16(octet) {
octet = octet | 0;
if (checkOffset(2) | 0) {
return 1;
}
pushArrayStartFixed(readUInt16(offset + 1 | 0) | 0);
offset = offset + 3 | 0;
return 0;
}
function ARRAY_32(octet) {
octet = octet | 0;
if (checkOffset(4) | 0) {
return 1;
}
pushArrayStartFixed32(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0);
offset = offset + 5 | 0;
return 0;
}
function ARRAY_64(octet) {
octet = octet | 0;
if (checkOffset(8) | 0) {
return 1;
}
pushArrayStartFixed64(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0, readUInt16(offset + 5 | 0) | 0, readUInt16(offset + 7 | 0) | 0);
offset = offset + 9 | 0;
return 0;
}
function ARRAY_BREAK(octet) {
octet = octet | 0;
pushArrayStart();
offset = offset + 1 | 0;
return 0;
}
function MAP(octet) {
octet = octet | 0;
var step = 0;
step = octet - 160 | 0;
if (checkOffset(step | 0) | 0) {
return 1;
}
pushObjectStartFixed(step | 0);
offset = offset + 1 | 0;
return 0;
}
function MAP_8(octet) {
octet = octet | 0;
if (checkOffset(1) | 0) {
return 1;
}
pushObjectStartFixed(heap[offset + 1 | 0] | 0);
offset = offset + 2 | 0;
return 0;
}
function MAP_16(octet) {
octet = octet | 0;
if (checkOffset(2) | 0) {
return 1;
}
pushObjectStartFixed(readUInt16(offset + 1 | 0) | 0);
offset = offset + 3 | 0;
return 0;
}
function MAP_32(octet) {
octet = octet | 0;
if (checkOffset(4) | 0) {
return 1;
}
pushObjectStartFixed32(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0);
offset = offset + 5 | 0;
return 0;
}
function MAP_64(octet) {
octet = octet | 0;
if (checkOffset(8) | 0) {
return 1;
}
pushObjectStartFixed64(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0, readUInt16(offset + 5 | 0) | 0, readUInt16(offset + 7 | 0) | 0);
offset = offset + 9 | 0;
return 0;
}
function MAP_BREAK(octet) {
octet = octet | 0;
pushObjectStart();
offset = offset + 1 | 0;
return 0;
}
function TAG_KNOWN(octet) {
octet = octet | 0;
pushTagStart(octet - 192 | 0 | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_BIGNUM_POS(octet) {
octet = octet | 0;
pushTagStart(octet | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_BIGNUM_NEG(octet) {
octet = octet | 0;
pushTagStart(octet | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_FRAC(octet) {
octet = octet | 0;
pushTagStart(octet | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_BIGNUM_FLOAT(octet) {
octet = octet | 0;
pushTagStart(octet | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_UNASSIGNED(octet) {
octet = octet | 0;
pushTagStart(octet - 192 | 0 | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_BASE64_URL(octet) {
octet = octet | 0;
pushTagStart(octet | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_BASE64(octet) {
octet = octet | 0;
pushTagStart(octet | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_BASE16(octet) {
octet = octet | 0;
pushTagStart(octet | 0);
offset = offset + 1 | 0;
return 0;
}
function TAG_MORE_1(octet) {
octet = octet | 0;
if (checkOffset(1) | 0) {
return 1;
}
pushTagStart(heap[offset + 1 | 0] | 0);
offset = offset + 2 | 0;
return 0;
}
function TAG_MORE_2(octet) {
octet = octet | 0;
if (checkOffset(2) | 0) {
return 1;
}
pushTagStart(readUInt16(offset + 1 | 0) | 0);
offset = offset + 3 | 0;
return 0;
}
function TAG_MORE_4(octet) {
octet = octet | 0;
if (checkOffset(4) | 0) {
return 1;
}
pushTagStart4(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0);
offset = offset + 5 | 0;
return 0;
}
function TAG_MORE_8(octet) {
octet = octet | 0;
if (checkOffset(8) | 0) {
return 1;
}
pushTagStart8(readUInt16(offset + 1 | 0) | 0, readUInt16(offset + 3 | 0) | 0, readUInt16(offset + 5 | 0) | 0, readUInt16(offset + 7 | 0) | 0);
offset = offset + 9 | 0;
return 0;
}
function SIMPLE_UNASSIGNED(octet) {
octet = octet | 0;
pushSimpleUnassigned((octet | 0) - 224 | 0);
offset = offset + 1 | 0;
return 0;
}
function SIMPLE_FALSE(octet) {
octet = octet | 0;
pushFalse();
offset = offset + 1 | 0;
return 0;
}
function SIMPLE_TRUE(octet) {
octet = octet | 0;
pushTrue();
offset = offset + 1 | 0;
return 0;
}
function SIMPLE_NULL(octet) {
octet = octet | 0;
pushNull();
offset = offset + 1 | 0;
return 0;
}
function SIMPLE_UNDEFINED(octet) {
octet = octet | 0;
pushUndefined();
offset = offset + 1 | 0;
return 0;
}
function SIMPLE_BYTE(octet) {
octet = octet | 0;
if (checkOffset(1) | 0) {
return 1;
}
pushSimpleUnassigned(heap[offset + 1 | 0] | 0);
offset = offset + 2 | 0;
return 0;
}
function SIMPLE_FLOAT_HALF(octet) {
octet = octet | 0;
var f = 0;
var g = 0;
var sign = 1.0;
var exp = 0.0;
var mant = 0.0;
var r = 0.0;
if (checkOffset(2) | 0) {
return 1;
}
f = heap[offset + 1 | 0] | 0;
g = heap[offset + 2 | 0] | 0;
if ((f | 0) & 0x80) {
sign = -1.0;
}
exp = +(((f | 0) & 0x7C) >> 2);
mant = +(((f | 0) & 0x03) << 8 | g);
if (+exp == 0.0) {
pushFloat(+(+sign * +5.9604644775390625e-8 * +mant));
} else if (+exp == 31.0) {
if (+sign == 1.0) {
if (+mant > 0.0) {
pushNaN();
} else {
pushInfinity();
}
} else {
if (+mant > 0.0) {
pushNaNNeg();
} else {
pushInfinityNeg();
}
}
} else {
pushFloat(+(+sign * pow(+2, +(+exp - 25.0)) * +(1024.0 + mant)));
}
offset = offset + 3 | 0;
return 0;
}
function SIMPLE_FLOAT_SINGLE(octet) {
octet = octet | 0;
if (checkOffset(4) | 0) {
return 1;
}
pushFloatSingle(heap[offset + 1 | 0] | 0, heap[offset + 2 | 0] | 0, heap[offset + 3 | 0] | 0, heap[offset + 4 | 0] | 0);
offset = offset + 5 | 0;
return 0;
}
function SIMPLE_FLOAT_DOUBLE(octet) {
octet = octet | 0;
if (checkOffset(8) | 0) {
return 1;
}
pushFloatDouble(heap[offset + 1 | 0] | 0, heap[offset + 2 | 0] | 0, heap[offset + 3 | 0] | 0, heap[offset + 4 | 0] | 0, heap[offset + 5 | 0] | 0, heap[offset + 6 | 0] | 0, heap[offset + 7 | 0] | 0, heap[offset + 8 | 0] | 0);
offset = offset + 9 | 0;
return 0;
}
function ERROR(octet) {
octet = octet | 0;
return 1;
}
function BREAK(octet) {
octet = octet | 0;
pushBreak();
offset = offset + 1 | 0;
return 0;
} // -- Jump Table
var jumpTable = [// Integer 0x00..0x17 (0..23)
INT_P, // 0x00
INT_P, // 0x01
INT_P, // 0x02
INT_P, // 0x03
INT_P, // 0x04
INT_P, // 0x05
INT_P, // 0x06
INT_P, // 0x07
INT_P, // 0x08
INT_P, // 0x09
INT_P, // 0x0A
INT_P, // 0x0B
INT_P, // 0x0C
INT_P, // 0x0D
INT_P, // 0x0E
INT_P, // 0x0F
INT_P, // 0x10
INT_P, // 0x11
INT_P, // 0x12
INT_P, // 0x13
INT_P, // 0x14
INT_P, // 0x15
INT_P, // 0x16
INT_P, // 0x17
// Unsigned integer (one-byte uint8_t follows)
UINT_P_8, // 0x18
// Unsigned integer (two-byte uint16_t follows)
UINT_P_16, // 0x19
// Unsigned integer (four-byte uint32_t follows)
UINT_P_32, // 0x1a
// Unsigned integer (eight-byte uint64_t follows)
UINT_P_64, // 0x1b
ERROR, // 0x1c
ERROR, // 0x1d
ERROR, // 0x1e
ERROR, // 0x1f
// Negative integer -1-0x00..-1-0x17 (-1..-24)
INT_N, // 0x20
INT_N, // 0x21
INT_N, // 0x22
INT_N, // 0x23
INT_N, // 0x24
INT_N, // 0x25
INT_N, // 0x26
INT_N, // 0x27
INT_N, // 0x28
INT_N, // 0x29
INT_N, // 0x2A
INT_N, // 0x2B
INT_N, // 0x2C
INT_N, // 0x2D
INT_N, // 0x2E
INT_N, // 0x2F
INT_N, // 0x30
INT_N, // 0x31
INT_N, // 0x32
INT_N, // 0x33
INT_N, // 0x34
INT_N, // 0x35
INT_N, // 0x36
INT_N, // 0x37
// Negative integer -1-n (one-byte uint8_t for n follows)
UINT_N_8, // 0x38
// Negative integer -1-n (two-byte uint16_t for n follows)
UINT_N_16, // 0x39
// Negative integer -1-n (four-byte uint32_t for nfollows)
UINT_N_32, // 0x3a
// Negative integer -1-n (eight-byte uint64_t for n follows)
UINT_N_64, // 0x3b
ERROR, // 0x3c
ERROR, // 0x3d
ERROR, // 0x3e
ERROR, // 0x3f
// byte string (0x00..0x17 bytes follow)
BYTE_STRING, // 0x40
BYTE_STRING, // 0x41
BYTE_STRING, // 0x42
BYTE_STRING, // 0x43
BYTE_STRING, // 0x44
BYTE_STRING, // 0x45
BYTE_STRING, // 0x46
BYTE_STRING, // 0x47
BYTE_STRING, // 0x48
BYTE_STRING, // 0x49
BYTE_STRING, // 0x4A
BYTE_STRING, // 0x4B
BYTE_STRING, // 0x4C
BYTE_STRING, // 0x4D
BYTE_STRING, // 0x4E
BYTE_STRING, // 0x4F
BYTE_STRING, // 0x50
BYTE_STRING, // 0x51
BYTE_STRING, // 0x52
BYTE_STRING, // 0x53
BYTE_STRING, // 0x54
BYTE_STRING, // 0x55
BYTE_STRING, // 0x56
BYTE_STRING, // 0x57
// byte string (one-byte uint8_t for n, and then n bytes follow)
BYTE_STRING_8, // 0x58
// byte string (two-byte uint16_t for n, and then n bytes follow)
BYTE_STRING_16, // 0x59
// byte string (four-byte uint32_t for n, and then n bytes follow)
BYTE_STRING_32, // 0x5a
// byte string (eight-byte uint64_t for n, and then n bytes follow)
BYTE_STRING_64, // 0x5b
ERROR, // 0x5c
ERROR, // 0x5d
ERROR, // 0x5e
// byte string, byte strings follow, terminated by "break"
BYTE_STRING_BREAK, // 0x5f
// UTF-8 string (0x00..0x17 bytes follow)
UTF8_STRING, // 0x60
UTF8_STRING, // 0x61
UTF8_STRING, // 0x62
UTF8_STRING, // 0x63
UTF8_STRING, // 0x64
UTF8_STRING, // 0x65
UTF8_STRING, // 0x66
UTF8_STRING, // 0x67
UTF8_STRING, // 0x68
UTF8_STRING, // 0x69
UTF8_STRING, // 0x6A
UTF8_STRING, // 0x6B
UTF8_STRING, // 0x6C
UTF8_STRING, // 0x6D
UTF8_STRING, // 0x6E
UTF8_STRING, // 0x6F
UTF8_STRING, // 0x70
UTF8_STRING, // 0x71
UTF8_STRING, // 0x72
UTF8_STRING, // 0x73
UTF8_STRING, // 0x74
UTF8_STRING, // 0x75
UTF8_STRING, // 0x76
UTF8_STRING, // 0x77
// UTF-8 string (one-byte uint8_t for n, and then n bytes follow)
UTF8_STRING_8, // 0x78
// UTF-8 string (two-byte uint16_t for n, and then n bytes follow)
UTF8_STRING_16, // 0x79
// UTF-8 string (four-byte uint32_t for n, and then n bytes follow)
UTF8_STRING_32, // 0x7a
// UTF-8 string (eight-byte uint64_t for n, and then n bytes follow)
UTF8_STRING_64, // 0x7b
// UTF-8 string, UTF-8 strings follow, terminated by "break"
ERROR, // 0x7c
ERROR, // 0x7d
ERROR, // 0x7e
UTF8_STRING_BREAK, // 0x7f
// array (0x00..0x17 data items follow)
ARRAY, // 0x80
ARRAY, // 0x81
ARRAY, // 0x82
ARRAY, // 0x83
ARRAY, // 0x84
ARRAY, // 0x85
ARRAY, // 0x86
ARRAY, // 0x87
ARRAY, // 0x88
ARRAY, // 0x89
ARRAY, // 0x8A
ARRAY, // 0x8B
ARRAY, // 0x8C
ARRAY, // 0x8D
ARRAY, // 0x8E
ARRAY, // 0x8F
ARRAY, // 0x90
ARRAY, // 0x91
ARRAY, // 0x92
ARRAY, // 0x93
ARRAY, // 0x94
ARRAY, // 0x95
ARRAY, // 0x96
ARRAY, // 0x97
// array (one-byte uint8_t fo, and then n data items follow)
ARRAY_8, // 0x98
// array (two-byte uint16_t for n, and then n data items follow)
ARRAY_16, // 0x99
// array (four-byte uint32_t for n, and then n data items follow)
ARRAY_32, // 0x9a
// array (eight-byte uint64_t for n, and then n data items follow)
ARRAY_64, // 0x9b
// array, data items follow, terminated by "break"
ERROR, // 0x9c
ERROR, // 0x9d
ERROR, // 0x9e
ARRAY_BREAK, // 0x9f
// map (0x00..0x17 pairs of data items follow)
MAP, // 0xa0
MAP, // 0xa1
MAP, // 0xa2
MAP, // 0xa3
MAP, // 0xa4
MAP, // 0xa5
MAP, // 0xa6
MAP, // 0xa7
MAP, // 0xa8
MAP, // 0xa9
MAP, // 0xaA
MAP, // 0xaB
MAP, // 0xaC
MAP, // 0xaD
MAP, // 0xaE
MAP, // 0xaF
MAP, // 0xb0
MAP, // 0xb1
MAP, // 0xb2
MAP, // 0xb3
MAP, // 0xb4
MAP, // 0xb5
MAP, // 0xb6
MAP, // 0xb7
// map (one-byte uint8_t for n, and then n pairs of data items follow)
MAP_8, // 0xb8
// map (two-byte uint16_t for n, and then n pairs of data items follow)
MAP_16, // 0xb9
// map (four-byte uint32_t for n, and then n pairs of data items follow)
MAP_32, // 0xba
// map (eight-byte uint64_t for n, and then n pairs of data items follow)
MAP_64, // 0xbb
ERROR, // 0xbc
ERROR, // 0xbd
ERROR, // 0xbe
// map, pairs of data items follow, terminated by "break"
MAP_BREAK, // 0xbf
// Text-based date/time (data item follows; see Section 2.4.1)
TAG_KNOWN, // 0xc0
// Epoch-based date/time (data item follows; see Section 2.4.1)
TAG_KNOWN, // 0xc1
// Positive bignum (data item "byte string" follows)
TAG_KNOWN, // 0xc2
// Negative bignum (data item "byte string" follows)
TAG_KNOWN, // 0xc3
// Decimal Fraction (data item "array" follows; see Section 2.4.3)
TAG_KNOWN, // 0xc4
// Bigfloat (data item "array" follows; see Section 2.4.3)
TAG_KNOWN, // 0xc5
// (tagged item)
TAG_UNASSIGNED, // 0xc6
TAG_UNASSIGNED, // 0xc7
TAG_UNASSIGNED, // 0xc8
TAG_UNASSIGNED, // 0xc9
TAG_UNASSIGNED, // 0xca
TAG_UNASSIGNED, // 0xcb
TAG_UNASSIGNED, // 0xcc
TAG_UNASSIGNED, // 0xcd
TAG_UNASSIGNED, // 0xce
TAG_UNASSIGNED, // 0xcf
TAG_UNASSIGNED, // 0xd0
TAG_UNASSIGNED, // 0xd1
TAG_UNASSIGNED, // 0xd2
TAG_UNASSIGNED, // 0xd3
TAG_UNASSIGNED, // 0xd4
// Expected Conversion (data item follows; see Section 2.4.4.2)
TAG_UNASSIGNED, // 0xd5
TAG_UNASSIGNED, // 0xd6
TAG_UNASSIGNED, // 0xd7
// (more tagged items, 1/2/4/8 bytes and then a data item follow)
TAG_MORE_1, // 0xd8
TAG_MORE_2, // 0xd9
TAG_MORE_4, // 0xda
TAG_MORE_8, // 0xdb
ERROR, // 0xdc
ERROR, // 0xdd
ERROR, // 0xde
ERROR, // 0xdf
// (simple value)
SIMPLE_UNASSIGNED, // 0xe0
SIMPLE_UNASSIGNED, // 0xe1
SIMPLE_UNASSIGNED, // 0xe2
SIMPLE_UNASSIGNED, // 0xe3
SIMPLE_UNASSIGNED, // 0xe4
SIMPLE_UNASSIGNED, // 0xe5
SIMPLE_UNASSIGNED, // 0xe6
SIMPLE_UNASSIGNED, // 0xe7
SIMPLE_UNASSIGNED, // 0xe8
SIMPLE_UNASSIGNED, // 0xe9
SIMPLE_UNASSIGNED, // 0xea
SIMPLE_UNASSIGNED, // 0xeb
SIMPLE_UNASSIGNED, // 0xec
SIMPLE_UNASSIGNED, // 0xed
SIMPLE_UNASSIGNED, // 0xee
SIMPLE_UNASSIGNED, // 0xef
SIMPLE_UNASSIGNED, // 0xf0
SIMPLE_UNASSIGNED, // 0xf1
SIMPLE_UNASSIGNED, // 0xf2
SIMPLE_UNASSIGNED, // 0xf3
// False
SIMPLE_FALSE, // 0xf4
// True
SIMPLE_TRUE, // 0xf5
// Null
SIMPLE_NULL, // 0xf6
// Undefined
SIMPLE_UNDEFINED, // 0xf7
// (simple value, one byte follows)
SIMPLE_BYTE, // 0xf8
// Half-Precision Float (two-byte IEEE 754)
SIMPLE_FLOAT_HALF, // 0xf9
// Single-Precision Float (four-byte IEEE 754)
SIMPLE_FLOAT_SINGLE, // 0xfa
// Double-Precision Float (eight-byte IEEE 754)
SIMPLE_FLOAT_DOUBLE, // 0xfb
ERROR, // 0xfc
ERROR, // 0xfd
ERROR, // 0xfe
// "break" stop code
BREAK // 0xff
]; // --
return {
parse: parse
};
};
/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
const {
URLWithLegacySupport,
format
} = __webpack_require__(10);
module.exports = (url, location = {}, protocolMap = {}, defaultProtocol) => {
let protocol = location.protocol ? location.protocol.replace(':', '') : 'http'; // Check protocol map
protocol = (protocolMap[protocol] || defaultProtocol || protocol) + ':';
let urlParsed;
try {
urlParsed = new URLWithLegacySupport(url);
} catch (err) {
urlParsed = {};
}
const base = Object.assign({}, location, {
protocol: protocol || urlParsed.protocol,
host: location.host || urlParsed.host
});
return new URLWithLegacySupport(url, format(base)).toString();
};
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
const {
Buffer
} = __webpack_require__(0);
const {
URL
} = __webpack_require__(9);
const Bignumber = __webpack_require__(1).BigNumber;
const utils = __webpack_require__(3);
const constants = __webpack_require__(2);
const MT = constants.MT;
const NUMBYTES = constants.NUMBYTES;
const SHIFT32 = constants.SHIFT32;
const SYMS = constants.SYMS;
const TAG = constants.TAG;
const HALF = constants.MT.SIMPLE_FLOAT << 5 | constants.NUMBYTES.TWO;
const FLOAT = constants.MT.SIMPLE_FLOAT << 5 | constants.NUMBYTES.FOUR;
const DOUBLE = constants.MT.SIMPLE_FLOAT << 5 | constants.NUMBYTES.EIGHT;
const TRUE = constants.MT.SIMPLE_FLOAT << 5 | constants.SIMPLE.TRUE;
const FALSE = constants.MT.SIMPLE_FLOAT << 5 | constants.SIMPLE.FALSE;
const UNDEFINED = constants.MT.SIMPLE_FLOAT << 5 | constants.SIMPLE.UNDEFINED;
const NULL = constants.MT.SIMPLE_FLOAT << 5 | constants.SIMPLE.NULL;
const MAXINT_BN = new Bignumber('0x20000000000000');
const BUF_NAN = Buffer.from('f97e00', 'hex');
const BUF_INF_NEG = Buffer.from('f9fc00', 'hex');
const BUF_INF_POS = Buffer.from('f97c00', 'hex');
function toType(obj) {
// [object Type]
// --------8---1
return {}.toString.call(obj).slice(8, -1);
}
/**
* Transform JavaScript values into CBOR bytes
*
*/
class Encoder {
/**
* @param {Object} [options={}]
* @param {function(Buffer)} options.stream
*/
constructor(options) {
options = options || {};
this.streaming = typeof options.stream === 'function';
this.onData = options.stream;
this.semanticTypes = [[URL, this._pushUrl], [Bignumber, this._pushBigNumber]];
const addTypes = options.genTypes || [];
const len = addTypes.length;
for (let i = 0; i < len; i++) {
this.addSemanticType(addTypes[i][0], addTypes[i][1]);
}
this._reset();
}
addSemanticType(type, fun) {
const len = this.semanticTypes.length;
for (let i = 0; i < len; i++) {
const typ = this.semanticTypes[i][0];
if (typ === type) {
const old = this.semanticTypes[i][1];
this.semanticTypes[i][1] = fun;
return old;
}
}
this.semanticTypes.push([type, fun]);
return null;
}
push(val) {
if (!val) {
return true;
}
this.result[this.offset] = val;
this.resultMethod[this.offset] = 0;
this.resultLength[this.offset] = val.length;
this.offset++;
if (this.streaming) {
this.onData(this.finalize());
}
return true;
}
pushWrite(val, method, len) {
this.result[this.offset] = val;
this.resultMethod[this.offset] = method;
this.resultLength[this.offset] = len;
this.offset++;
if (this.streaming) {
this.onData(this.finalize());
}
return true;
}
_pushUInt8(val) {
return this.pushWrite(val, 1, 1);
}
_pushUInt16BE(val) {
return this.pushWrite(val, 2, 2);
}
_pushUInt32BE(val) {
return this.pushWrite(val, 3, 4);
}
_pushDoubleBE(val) {
return this.pushWrite(val, 4, 8);
}
_pushNaN() {
return this.push(BUF_NAN);
}
_pushInfinity(obj) {
const half = obj < 0 ? BUF_INF_NEG : BUF_INF_POS;
return this.push(half);
}
_pushFloat(obj) {
const b2 = Buffer.allocUnsafe(2);
if (utils.writeHalf(b2, obj)) {
if (utils.parseHalf(b2) === obj) {
return this._pushUInt8(HALF) && this.push(b2);
}
}
const b4 = Buffer.allocUnsafe(4);
b4.writeFloatBE(obj, 0);
if (b4.readFloatBE(0) === obj) {
return this._pushUInt8(FLOAT) && this.push(b4);
}
return this._pushUInt8(DOUBLE) && this._pushDoubleBE(obj);
}
_pushInt(obj, mt, orig) {
const m = mt << 5;
if (obj < 24) {
return this._pushUInt8(m | obj);
}
if (obj <= 0xff) {
return this._pushUInt8(m | NUMBYTES.ONE) && this._pushUInt8(obj);
}
if (obj <= 0xffff) {
return this._pushUInt8(m | NUMBYTES.TWO) && this._pushUInt16BE(obj);
}
if (obj <= 0xffffffff) {
return this._pushUInt8(m | NUMBYTES.FOUR) && this._pushUInt32BE(obj);
}
if (obj <= Number.MAX_SAFE_INTEGER) {
return this._pushUInt8(m | NUMBYTES.EIGHT) && this._pushUInt32BE(Math.floor(obj / SHIFT32)) && this._pushUInt32BE(obj % SHIFT32);
}
if (mt === MT.NEG_INT) {
return this._pushFloat(orig);
}
return this._pushFloat(obj);
}
_pushIntNum(obj) {
if (obj < 0) {
return this._pushInt(-obj - 1, MT.NEG_INT, obj);
} else {
return this._pushInt(obj, MT.POS_INT);
}
}
_pushNumber(obj) {
switch (false) {
case obj === obj:
// eslint-disable-line
return this._pushNaN(obj);
case isFinite(obj):
return this._pushInfinity(obj);
case obj % 1 !== 0:
return this._pushIntNum(obj);
default:
return this._pushFloat(obj);
}
}
_pushString(obj) {
const len = Buffer.byteLength(obj, 'utf8');
return this._pushInt(len, MT.UTF8_STRING) && this.pushWrite(obj, 5, len);
}
_pushBoolean(obj) {
return this._pushUInt8(obj ? TRUE : FALSE);
}
_pushUndefined(obj) {
return this._pushUInt8(UNDEFINED);
}
_pushArray(gen, obj) {
const len = obj.length;
if (!gen._pushInt(len, MT.ARRAY)) {
return false;
}
for (let j = 0; j < len; j++) {
if (!gen.pushAny(obj[j])) {
return false;
}
}
return true;
}
_pushTag(tag) {
return this._pushInt(tag, MT.TAG);
}
_pushDate(gen, obj) {
// Round date, to get seconds since 1970-01-01 00:00:00 as defined in
// Sec. 2.4.1 and get a possibly more compact encoding. Note that it is
// still allowed to encode fractions of seconds which can be achieved by
// changing overwriting the encode function for Date objects.
return gen._pushTag(TAG.DATE_EPOCH) && gen.pushAny(Math.round(obj / 1000));
}
_pushBuffer(gen, obj) {
return gen._pushInt(obj.length, MT.BYTE_STRING) && gen.push(obj);
}
_pushNoFilter(gen, obj) {
return gen._pushBuffer(gen, obj.slice());
}
_pushRegexp(gen, obj) {
return gen._pushTag(TAG.REGEXP) && gen.pushAny(obj.source);
}
_pushSet(gen, obj) {
if (!gen._pushInt(obj.size, MT.ARRAY)) {
return false;
}
for (const x of obj) {
if (!gen.pushAny(x)) {
return false;
}
}
return true;
}
_pushUrl(gen, obj) {
return gen._pushTag(TAG.URI) && gen.pushAny(obj.format());
}
_pushBigint(obj) {
let tag = TAG.POS_BIGINT;
if (obj.isNegative()) {
obj = obj.negated().minus(1);
tag = TAG.NEG_BIGINT;
}
let str = obj.toString(16);
if (str.length % 2) {
str = '0' + str;
}
const buf = Buffer.from(str, 'hex');
return this._pushTag(tag) && this._pushBuffer(this, buf);
}
_pushBigNumber(gen, obj) {
if (obj.isNaN()) {
return gen._pushNaN();
}
if (!obj.isFinite()) {
return gen._pushInfinity(obj.isNegative() ? -Infinity : Infinity);
}
if (obj.isInteger()) {
return gen._pushBigint(obj);
}
if (!(gen._pushTag(TAG.DECIMAL_FRAC) && gen._pushInt(2, MT.ARRAY))) {
return false;
}
const dec = obj.decimalPlaces();
const slide = obj.multipliedBy(new Bignumber(10).pow(dec));
if (!gen._pushIntNum(-dec)) {
return false;
}
if (slide.abs().isLessThan(MAXINT_BN)) {
return gen._pushIntNum(slide.toNumber());
} else {
return gen._pushBigint(slide);
}
}
_pushMap(gen, obj) {
if (!gen._pushInt(obj.size, MT.MAP)) {
return false;
}
return this._pushRawMap(obj.size, Array.from(obj));
}
_pushObject(obj) {
if (!obj) {
return this._pushUInt8(NULL);
}
var len = this.semanticTypes.length;
for (var i = 0; i < len; i++) {
if (obj instanceof this.semanticTypes[i][0]) {
return this.semanticTypes[i][1].call(obj, this, obj);
}
}
var f = obj.encodeCBOR;
if (typeof f === 'function') {
return f.call(obj, this);
}
var keys = Object.keys(obj);
var keyLength = keys.length;
if (!this._pushInt(keyLength, MT.MAP)) {
return false;
}
return this._pushRawMap(keyLength, keys.map(k => [k, obj[k]]));
}
_pushRawMap(len, map) {
// Sort keys for canoncialization
// 1. encode key
// 2. shorter key comes before longer key
// 3. same length keys are sorted with lower
// byte value before higher
map = map.map(function (a) {
a[0] = Encoder.encode(a[0]);
return a;
}).sort(utils.keySorter);
for (var j = 0; j < len; j++) {
if (!this.push(map[j][0])) {
return false;
}
if (!this.pushAny(map[j][1])) {
return false;
}
}
return true;
}
/**
* Alias for `.pushAny`
*
* @param {*} obj
* @returns {boolean} true on success
*/
write(obj) {
return this.pushAny(obj);
}
/**
* Push any supported type onto the encoded stream
*
* @param {any} obj
* @returns {boolean} true on success
*/
pushAny(obj) {
var typ = toType(obj);
switch (typ) {
case 'Number':
return this._pushNumber(obj);
case 'String':
return this._pushString(obj);
case 'Boolean':
return this._pushBoolean(obj);
case 'Object':
return this._pushObject(obj);
case 'Array':
return this._pushArray(this, obj);
case 'Uint8Array':
return this._pushBuffer(this, Buffer.isBuffer(obj) ? obj : Buffer.from(obj));
case 'Null':
return this._pushUInt8(NULL);
case 'Undefined':
return this._pushUndefined(obj);
case 'Map':
return this._pushMap(this, obj);
case 'Set':
return this._pushSet(this, obj);
case 'URL':
return this._pushUrl(this, obj);
case 'BigNumber':
return this._pushBigNumber(this, obj);
case 'Date':
return this._pushDate(this, obj);
case 'RegExp':
return this._pushRegexp(this, obj);
case 'Symbol':
switch (obj) {
case SYMS.NULL:
return this._pushObject(null);
case SYMS.UNDEFINED:
return this._pushUndefined(undefined);
// TODO: Add pluggable support for other symbols
default:
throw new Error('Unknown symbol: ' + obj.toString());
}
default:
throw new Error('Unknown type: ' + typeof obj + ', ' + (obj ? obj.toString() : ''));
}
}
finalize() {
if (this.offset === 0) {
return null;
}
var result = this.result;
var resultLength = this.resultLength;
var resultMethod = this.resultMethod;
var offset = this.offset; // Determine the size of the buffer
var size = 0;
var i = 0;
for (; i < offset; i++) {
size += resultLength[i];
}
var res = Buffer.allocUnsafe(size);
var index = 0;
var length = 0; // Write the content into the result buffer
for (i = 0; i < offset; i++) {
length = resultLength[i];
switch (resultMethod[i]) {
case 0:
result[i].copy(res, index);
break;
case 1:
res.writeUInt8(result[i], index, true);
break;
case 2:
res.writeUInt16BE(result[i], index, true);
break;
case 3:
res.writeUInt32BE(result[i], index, true);
break;
case 4:
res.writeDoubleBE(result[i], index, true);
break;
case 5:
res.write(result[i], index, length, 'utf8');
break;
default:
throw new Error('unkown method');
}
index += length;
}
var tmp = res;
this._reset();
return tmp;
}
_reset() {
this.result = [];
this.resultMethod = [];
this.resultLength = [];
this.offset = 0;
}
/**
* Encode the given value
* @param {*} o
* @returns {Buffer}
*/
static encode(o) {
const enc = new Encoder();
const ret = enc.pushAny(o);
if (!ret) {
throw new Error('Failed to encode input');
}
return enc.finalize();
}
}
module.exports = Encoder;
/***/ })
/******/ ]);
});
//# sourceMappingURL=index.js.mapВыполнить команду
Для локальной разработки. Не используйте в интернете!