{"version":3,"file":"static/js/4.6623ccd1.js","mappings":"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","sources":["../node_modules/@visx/axis/esm/axis/Ticks.js","../node_modules/@visx/axis/esm/axis/AxisRenderer.js","../node_modules/@visx/axis/esm/utils/getLabelTransform.js","../node_modules/@visx/scale/esm/utils/toString.js","../node_modules/@visx/axis/esm/utils/createPoint.js","../node_modules/@visx/axis/esm/axis/Axis.js","../node_modules/@visx/axis/esm/utils/getTickFormatter.js","../node_modules/@visx/axis/esm/utils/getTickPosition.js","../node_modules/@visx/scale/esm/utils/getTicks.js","../node_modules/@visx/scale/esm/utils/coerceNumber.js","../node_modules/@visx/axis/esm/axis/AxisBottom.js","../node_modules/@visx/axis/esm/axis/AxisLeft.js","../node_modules/@visx/axis/esm/constants/orientation.js","../node_modules/@visx/event/esm/getXAndYFromEvent.js","../node_modules/@visx/event/esm/localPointGeneric.js","../node_modules/@visx/event/esm/typeGuards.js","../node_modules/@visx/event/esm/localPoint.js","../node_modules/@visx/gradient/esm/gradients/LinearGradient.js","../node_modules/@visx/group/esm/Group.js","../node_modules/@visx/point/esm/Point.js","../node_modules/@visx/responsive/esm/components/ParentSize.js","../node_modules/@visx/responsive/esm/components/ScaleSVG.js","../node_modules/@visx/scale/esm/utils/createColorInterpolator.js","../node_modules/@visx/scale/esm/utils/isUtcScale.js","../node_modules/@visx/scale/esm/operators/nice.js","../node_modules/@visx/scale/esm/operators/scaleOperator.js","../node_modules/@visx/scale/esm/operators/domain.js","../node_modules/@visx/scale/esm/operators/zero.js","../node_modules/@visx/scale/esm/operators/interpolate.js","../node_modules/@visx/scale/esm/operators/round.js","../node_modules/@visx/scale/esm/operators/align.js","../node_modules/@visx/scale/esm/operators/base.js","../node_modules/@visx/scale/esm/operators/clamp.js","../node_modules/@visx/scale/esm/operators/constant.js","../node_modules/@visx/scale/esm/operators/exponent.js","../node_modules/@visx/scale/esm/operators/padding.js","../node_modules/@visx/scale/esm/operators/range.js","../node_modules/@visx/scale/esm/operators/reverse.js","../node_modules/@visx/scale/esm/operators/unknown.js","../node_modules/@visx/scale/esm/scales/linear.js","../node_modules/@visx/scale/esm/scales/time.js","../node_modules/@visx/shape/esm/shapes/AreaClosed.js","../node_modules/@visx/shape/esm/shapes/Bar.js","../node_modules/@visx/shape/esm/shapes/Line.js","../node_modules/@visx/shape/esm/shapes/LinePath.js","../node_modules/@visx/shape/esm/util/D3ShapeFactories.js","../node_modules/@visx/shape/esm/util/setNumberOrNumberAccessor.js","../node_modules/@visx/text/esm/util/getStringWidth.js","../node_modules/@visx/text/esm/hooks/useText.js","../node_modules/@visx/text/esm/Text.js","../node_modules/@visx/tooltip/esm/hooks/useTooltip.js","../node_modules/@visx/tooltip/esm/tooltips/Tooltip.js","../node_modules/@visx/bounds/esm/enhancers/withBoundingRects.js","../node_modules/@visx/tooltip/esm/tooltips/TooltipWithBounds.js","../node_modules/@yfi/sdk/dist/index.js","../node_modules/@yfi/sdk/src/types/common.ts","../node_modules/@yfi/sdk/src/types/custom/simulation.ts","../node_modules/@yfi/sdk/src/types/custom/zapper.ts","../node_modules/@yfi/sdk/src/context.ts","../node_modules/@yfi/sdk/node_modules/regenerator-runtime/runtime.js","../node_modules/@yfi/sdk/src/cache.ts","../node_modules/@yfi/sdk/src/common.ts","../node_modules/@yfi/sdk/src/services/subgraph/queries.ts","../node_modules/@yfi/sdk/src/interfaces/earnings.ts","../node_modules/@yfi/sdk/src/interfaces/fees.ts","../node_modules/@yfi/sdk/src/interfaces/ironbank.ts","../node_modules/@yfi/sdk/src/helpers.ts","../node_modules/@yfi/sdk/src/services/partners/pickle.ts","../node_modules/@yfi/sdk/src/simulationExecutor.ts","../node_modules/@yfi/sdk/src/vault.ts","../node_modules/@yfi/sdk/src/interfaces/simulation.ts","../node_modules/@yfi/sdk/src/interfaces/strategy.ts","../node_modules/@yfi/sdk/src/interfaces/token.ts","../node_modules/@yfi/sdk/src/interfaces/vault.ts","../node_modules/@yfi/sdk/src/abi.ts","../node_modules/@yfi/sdk/src/struct.ts","../node_modules/@yfi/sdk/src/services/adapters/ironbank.ts","../node_modules/@yfi/sdk/src/services/adapters/registry.ts","../node_modules/@yfi/sdk/src/services/assets.ts","../node_modules/@yfi/sdk/src/services/lens.ts","../node_modules/@yfi/sdk/src/services/oracle.ts","../node_modules/@yfi/sdk/src/services/subgraph/index.ts","../node_modules/@yfi/sdk/src/services/telegram.ts","../node_modules/@yfi/sdk/src/services/vision.ts","../node_modules/@yfi/sdk/src/chain.ts","../node_modules/@yfi/sdk/src/services/zapper.ts","../node_modules/@yfi/sdk/src/services/allowlist.ts","../node_modules/@yfi/sdk/src/services/helper.ts","../node_modules/@yfi/sdk/src/services/meta.ts","../node_modules/@yfi/sdk/src/services/transaction.ts","../node_modules/@yfi/sdk/src/yearn.ts","../node_modules/@yfi/sdk/node_modules/bignumber.js/bignumber.js","../node_modules/util-deprecate/browser.js","../node_modules/util/support/isBufferBrowser.js","../node_modules/util/support/types.js","../node_modules/util/util.js","../node_modules/uuid/index.js","../node_modules/uuid/lib/bytesToUuid.js","../node_modules/uuid/lib/rng-browser.js","../node_modules/uuid/v1.js","../node_modules/uuid/v4.js","../node_modules/validate/build/error.js","../node_modules/validate/build/messages.js","../node_modules/validate/build/property.js","../node_modules/validate/build/schema.js","../node_modules/validate/build/utils.js","../node_modules/validate/build/validators.js","../node_modules/value-equal/esm/value-equal.js","../node_modules/varint/decode.js","../node_modules/varint/encode.js","../node_modules/varint/index.js","../node_modules/varint/length.js","../node_modules/varuint-bitcoin/index.js","../node_modules/warning/warning.js","../node_modules/web-encoding/src/lib.js","../node_modules/web3-bzz/lib/index.js","../node_modules/web3-core-helpers/lib/errors.js","../node_modules/web3-core-helpers/lib/formatters.js","../node_modules/web3-core-helpers/lib/index.js","../node_modules/web3-core-method/lib/index.js","../node_modules/web3-core-promievent/lib/index.js","../node_modules/web3-core-requestmanager/lib/batch.js","../node_modules/web3-core-requestmanager/lib/givenProvider.js","../node_modules/web3-core-requestmanager/lib/index.js","../node_modules/web3-core-requestmanager/lib/jsonrpc.js","../node_modules/web3-core-subscriptions/lib/index.js","../node_modules/web3-core-subscriptions/lib/subscription.js","../node_modules/web3-core/lib/extend.js","../node_modules/web3-core/lib/index.js","../node_modules/web3-eth-abi/lib/index.js","../../src.ts/_version.ts","../../src.ts/fragments.ts","../../../src.ts/coders/abstract-coder.ts","../../../src.ts/coders/address.ts","../../../src.ts/coders/anonymous.ts","../../../src.ts/coders/array.ts","../../../src.ts/coders/boolean.ts","../../../src.ts/coders/bytes.ts","../../../src.ts/coders/fixed-bytes.ts","../../../src.ts/coders/null.ts","../../../src.ts/coders/number.ts","../../../src.ts/coders/string.ts","../../../src.ts/coders/tuple.ts","../../src.ts/abi-coder.ts","../../src.ts/interface.ts","../node_modules/web3-eth-accounts/lib/index.js","../node_modules/web3-eth-accounts/node_modules/bn.js/lib/bn.js","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/account.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/address.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/bytes.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/constants.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/externals.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/hash.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/helpers.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/index.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/internal.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/object.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/signature.ts","../node_modules/web3-eth-accounts/node_modules/ethereumjs-util/src/types.ts","../node_modules/web3-eth-accounts/node_modules/uuid/index.js","../node_modules/web3-eth-accounts/node_modules/uuid/lib/bytesToUuid.js","../node_modules/web3-eth-accounts/node_modules/uuid/lib/rng-browser.js","../node_modules/web3-eth-accounts/node_modules/uuid/v1.js","../node_modules/web3-eth-accounts/node_modules/uuid/v4.js","../node_modules/web3-eth-contract/lib/index.js","../node_modules/web3-eth-ens/lib/ENS.js","../node_modules/web3-eth-ens/lib/config.js","../node_modules/web3-eth-ens/lib/contracts/Registry.js","../node_modules/web3-eth-ens/lib/index.js","../node_modules/web3-eth-ens/lib/lib/ResolverMethodHandler.js","../node_modules/web3-eth-ens/lib/lib/contentHash.js","../node_modules/web3-eth-ens/lib/resources/ABI/Registry.js","../node_modules/web3-eth-ens/lib/resources/ABI/Resolver.js","../node_modules/web3-eth-iban/lib/index.js","../node_modules/web3-eth-personal/lib/index.js","../node_modules/web3-eth/lib/getNetworkType.js","../node_modules/web3-eth/lib/index.js","../node_modules/web3-net/lib/index.js","../node_modules/web3-providers-http/lib/index.js","../node_modules/web3-providers-ipc/lib/index.js","../node_modules/web3-providers-ws/lib/helpers.js","../node_modules/web3-providers-ws/lib/index.js","../node_modules/web3-shh/lib/index.js","../node_modules/web3-utils/lib/index.js","../node_modules/web3-utils/lib/soliditySha3.js","../node_modules/web3-utils/lib/utils.js","../node_modules/web3-utils/node_modules/ethereumjs-util/src/account.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/address.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/bytes.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/constants.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/externals.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/hash.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/helpers.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/index.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/internal.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/object.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/signature.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/src/types.ts","../node_modules/web3-utils/node_modules/ethereumjs-util/node_modules/bn.js/lib/bn.js","../node_modules/web3/lib/index.js","../node_modules/websocket-stream/stream.js","../node_modules/websocket-stream/ws-fallback.js","../node_modules/websocket/lib/browser.js","../node_modules/websocket/lib/version.js","../node_modules/which-typed-array/index.js","../node_modules/wif/index.js","../node_modules/wrappy/wrappy.js","../node_modules/xhr-request/index.js","../node_modules/xhr-request/lib/ensure-header.js","../node_modules/xhr-request/lib/normalize-response.js","../node_modules/xhr-request/lib/request-browser.js","../node_modules/xhr/index.js","../../errors.ts","../../index.ts","../../progress-event.ts","../../xml-http-request-event-target.ts","../../xml-http-request-upload.ts","../../xml-http-request.ts","../node_modules/xstream/src/index.ts","../node_modules/xtend/immutable.js"],"sourcesContent":["function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { Line } from '@visx/shape';\nimport { Group } from '@visx/group';\nimport { Text } from '@visx/text';\nimport Orientation from '../constants/orientation';\nexport default function Ticks(_ref) {\n var hideTicks = _ref.hideTicks,\n horizontal = _ref.horizontal,\n orientation = _ref.orientation,\n tickClassName = _ref.tickClassName,\n tickComponent = _ref.tickComponent,\n allTickLabelProps = _ref.tickLabelProps,\n _ref$tickStroke = _ref.tickStroke,\n tickStroke = _ref$tickStroke === void 0 ? '#222' : _ref$tickStroke,\n tickTransform = _ref.tickTransform,\n ticks = _ref.ticks,\n strokeWidth = _ref.strokeWidth,\n tickLineProps = _ref.tickLineProps;\n return ticks.map(function (_ref2) {\n var _allTickLabelProps$in;\n\n var value = _ref2.value,\n index = _ref2.index,\n from = _ref2.from,\n to = _ref2.to,\n formattedValue = _ref2.formattedValue;\n var tickLabelProps = (_allTickLabelProps$in = allTickLabelProps[index]) != null ? _allTickLabelProps$in : {};\n var tickLabelFontSize = Math.max(10, typeof tickLabelProps.fontSize === 'number' && tickLabelProps.fontSize || 0);\n var tickYCoord = to.y + (horizontal && orientation !== Orientation.top ? tickLabelFontSize : 0);\n return /*#__PURE__*/React.createElement(Group, {\n key: \"visx-tick-\" + value + \"-\" + index,\n className: cx('visx-axis-tick', tickClassName),\n transform: tickTransform\n }, !hideTicks && /*#__PURE__*/React.createElement(Line, _extends({\n from: from,\n to: to,\n stroke: tickStroke,\n strokeWidth: strokeWidth,\n strokeLinecap: \"square\"\n }, tickLineProps)), tickComponent ? tickComponent(_extends({}, tickLabelProps, {\n x: to.x,\n y: tickYCoord,\n formattedValue: formattedValue\n })) : /*#__PURE__*/React.createElement(Text, _extends({\n x: to.x,\n y: tickYCoord\n }, tickLabelProps), formattedValue));\n });\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { Line } from '@visx/shape';\nimport { Text } from '@visx/text';\nimport getLabelTransform from '../utils/getLabelTransform';\nimport Ticks from './Ticks';\nimport { Orientation } from '..';\nvar defaultTextProps = {\n textAnchor: 'middle',\n fontFamily: 'Arial',\n fontSize: 10,\n fill: '#222'\n};\nexport default function AxisRenderer(_ref) {\n var axisFromPoint = _ref.axisFromPoint,\n axisLineClassName = _ref.axisLineClassName,\n axisToPoint = _ref.axisToPoint,\n hideAxisLine = _ref.hideAxisLine,\n hideTicks = _ref.hideTicks,\n horizontal = _ref.horizontal,\n _ref$label = _ref.label,\n label = _ref$label === void 0 ? '' : _ref$label,\n labelClassName = _ref.labelClassName,\n _ref$labelOffset = _ref.labelOffset,\n labelOffset = _ref$labelOffset === void 0 ? 14 : _ref$labelOffset,\n _ref$labelProps = _ref.labelProps,\n labelProps = _ref$labelProps === void 0 ? defaultTextProps : _ref$labelProps,\n _ref$orientation = _ref.orientation,\n orientation = _ref$orientation === void 0 ? Orientation.bottom : _ref$orientation,\n scale = _ref.scale,\n _ref$stroke = _ref.stroke,\n stroke = _ref$stroke === void 0 ? '#222' : _ref$stroke,\n strokeDasharray = _ref.strokeDasharray,\n _ref$strokeWidth = _ref.strokeWidth,\n strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n tickClassName = _ref.tickClassName,\n tickComponent = _ref.tickComponent,\n tickLineProps = _ref.tickLineProps,\n _ref$tickLabelProps = _ref.tickLabelProps,\n tickLabelProps = _ref$tickLabelProps === void 0 ? function () {\n return defaultTextProps;\n } : _ref$tickLabelProps,\n _ref$tickLength = _ref.tickLength,\n tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n _ref$tickStroke = _ref.tickStroke,\n tickStroke = _ref$tickStroke === void 0 ? '#222' : _ref$tickStroke,\n tickTransform = _ref.tickTransform,\n ticks = _ref.ticks,\n _ref$ticksComponent = _ref.ticksComponent,\n ticksComponent = _ref$ticksComponent === void 0 ? Ticks : _ref$ticksComponent;\n // compute the max tick label size to compute label offset\n var allTickLabelProps = ticks.map(function (_ref2) {\n var value = _ref2.value,\n index = _ref2.index;\n return tickLabelProps(value, index, ticks);\n });\n var maxTickLabelFontSize = Math.max.apply(Math, [10].concat(allTickLabelProps.map(function (props) {\n return typeof props.fontSize === 'number' ? props.fontSize : 0;\n })));\n return /*#__PURE__*/React.createElement(React.Fragment, null, ticksComponent({\n hideTicks: hideTicks,\n horizontal: horizontal,\n orientation: orientation,\n scale: scale,\n tickClassName: tickClassName,\n tickComponent: tickComponent,\n tickLabelProps: allTickLabelProps,\n tickStroke: tickStroke,\n tickTransform: tickTransform,\n ticks: ticks,\n strokeWidth: strokeWidth,\n tickLineProps: tickLineProps\n }), !hideAxisLine && /*#__PURE__*/React.createElement(Line, {\n className: cx('visx-axis-line', axisLineClassName),\n from: axisFromPoint,\n to: axisToPoint,\n stroke: stroke,\n strokeWidth: strokeWidth,\n strokeDasharray: strokeDasharray\n }), label && /*#__PURE__*/React.createElement(Text, _extends({\n className: cx('visx-axis-label', labelClassName)\n }, getLabelTransform({\n labelOffset: labelOffset,\n labelProps: labelProps,\n orientation: orientation,\n range: scale.range(),\n tickLabelFontSize: maxTickLabelFontSize,\n tickLength: tickLength\n }), labelProps), label));\n}","import Orientation from '../constants/orientation';\nexport default function getLabelTransform(_ref) {\n var labelOffset = _ref.labelOffset,\n labelProps = _ref.labelProps,\n orientation = _ref.orientation,\n range = _ref.range,\n tickLabelFontSize = _ref.tickLabelFontSize,\n tickLength = _ref.tickLength;\n var sign = orientation === Orientation.left || orientation === Orientation.top ? -1 : 1;\n var x;\n var y;\n var transform;\n\n if (orientation === Orientation.top || orientation === Orientation.bottom) {\n var yBottomOffset = orientation === Orientation.bottom && typeof labelProps.fontSize === 'number' ? labelProps.fontSize : 0;\n x = (Number(range[0]) + Number(range[range.length - 1])) / 2;\n y = sign * (tickLength + labelOffset + tickLabelFontSize + yBottomOffset);\n } else {\n x = sign * ((Number(range[0]) + Number(range[range.length - 1])) / 2);\n y = -(tickLength + labelOffset);\n transform = \"rotate(\" + sign * 90 + \")\";\n }\n\n return {\n x: x,\n y: y,\n transform: transform\n };\n}","export default function toString(x) {\n return x == null ? void 0 : x.toString();\n}","import { Point } from '@visx/point';\nexport default function createPoint(_ref, horizontal) {\n var x = _ref.x,\n y = _ref.y;\n return new Point(horizontal ? {\n x: x,\n y: y\n } : {\n x: y,\n y: x\n });\n}","import _pt from \"prop-types\";\nvar _excluded = [\"children\", \"axisClassName\", \"hideAxisLine\", \"hideTicks\", \"hideZero\", \"left\", \"numTicks\", \"orientation\", \"rangePadding\", \"scale\", \"tickFormat\", \"tickLength\", \"tickValues\", \"top\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { Group } from '@visx/group';\nimport { getTicks, coerceNumber } from '@visx/scale';\nimport AxisRenderer from './AxisRenderer';\nimport getTickPosition from '../utils/getTickPosition';\nimport getTickFormatter from '../utils/getTickFormatter';\nimport createPoint from '../utils/createPoint';\nimport Orientation from '../constants/orientation';\nexport default function Axis(_ref) {\n var _ref$children = _ref.children,\n children = _ref$children === void 0 ? AxisRenderer : _ref$children,\n axisClassName = _ref.axisClassName,\n _ref$hideAxisLine = _ref.hideAxisLine,\n hideAxisLine = _ref$hideAxisLine === void 0 ? false : _ref$hideAxisLine,\n _ref$hideTicks = _ref.hideTicks,\n hideTicks = _ref$hideTicks === void 0 ? false : _ref$hideTicks,\n _ref$hideZero = _ref.hideZero,\n hideZero = _ref$hideZero === void 0 ? false : _ref$hideZero,\n _ref$left = _ref.left,\n left = _ref$left === void 0 ? 0 : _ref$left,\n _ref$numTicks = _ref.numTicks,\n numTicks = _ref$numTicks === void 0 ? 10 : _ref$numTicks,\n _ref$orientation = _ref.orientation,\n orientation = _ref$orientation === void 0 ? Orientation.bottom : _ref$orientation,\n _ref$rangePadding = _ref.rangePadding,\n rangePadding = _ref$rangePadding === void 0 ? 0 : _ref$rangePadding,\n scale = _ref.scale,\n tickFormat = _ref.tickFormat,\n _ref$tickLength = _ref.tickLength,\n tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n tickValues = _ref.tickValues,\n _ref$top = _ref.top,\n top = _ref$top === void 0 ? 0 : _ref$top,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n var format = tickFormat != null ? tickFormat : getTickFormatter(scale);\n var isLeft = orientation === Orientation.left;\n var isTop = orientation === Orientation.top;\n var horizontal = isTop || orientation === Orientation.bottom;\n var tickPosition = getTickPosition(scale);\n var tickSign = isLeft || isTop ? -1 : 1;\n var range = scale.range();\n var axisFromPoint = createPoint({\n x: Number(range[0]) + 0.5 - rangePadding,\n y: 0\n }, horizontal);\n var axisToPoint = createPoint({\n x: Number(range[range.length - 1]) + 0.5 + rangePadding,\n y: 0\n }, horizontal);\n var filteredTickValues = (tickValues != null ? tickValues : getTicks(scale, numTicks)).filter(function (value) {\n return !hideZero || value !== 0 && value !== '0';\n }).map(function (value, index) {\n return {\n value: value,\n index: index\n };\n });\n var ticks = filteredTickValues.map(function (_ref2) {\n var value = _ref2.value,\n index = _ref2.index;\n var scaledValue = coerceNumber(tickPosition(value));\n return {\n value: value,\n index: index,\n from: createPoint({\n x: scaledValue,\n y: 0\n }, horizontal),\n to: createPoint({\n x: scaledValue,\n y: tickLength * tickSign\n }, horizontal),\n formattedValue: format(value, index, filteredTickValues)\n };\n });\n return /*#__PURE__*/React.createElement(Group, {\n className: cx('visx-axis', axisClassName),\n top: top,\n left: left\n }, children(_extends({}, restProps, {\n axisFromPoint: axisFromPoint,\n axisToPoint: axisToPoint,\n hideAxisLine: hideAxisLine,\n hideTicks: hideTicks,\n hideZero: hideZero,\n horizontal: horizontal,\n numTicks: numTicks,\n orientation: orientation,\n rangePadding: rangePadding,\n scale: scale,\n tickFormat: format,\n tickLength: tickLength,\n tickPosition: tickPosition,\n tickSign: tickSign,\n ticks: ticks\n })));\n}","import { toString } from '@visx/scale';\n\n/**\n * Returns a tick position for the given tick value\n */\nexport default function getTickFormatter(scale) {\n // Broaden type before using 'xxx' in s as typeguard.\n var s = scale; // For point or band scales,\n // have to add offset to make the tick centered.\n\n if ('tickFormat' in s) {\n return s.tickFormat();\n }\n\n return toString;\n}","/**\n * Create a function that returns a tick position for the given tick value\n */\nexport default function getTickPosition(scale, align) {\n if (align === void 0) {\n align = 'center';\n }\n\n // Broaden type before using 'xxx' in s as typeguard.\n var s = scale; // For point or band scales,\n // have to add offset to make the tick at center or end.\n\n if (align !== 'start' && 'bandwidth' in s) {\n var offset = s.bandwidth();\n if (align === 'center') offset /= 2;\n if (s.round()) offset = Math.round(offset);\n return function (d) {\n var scaledValue = s(d);\n return typeof scaledValue === 'number' ? scaledValue + offset : scaledValue;\n };\n }\n\n return scale;\n}","export default function getTicks(scale, numTicks) {\n // Because `Scale` is generic type which maybe a subset of AnyD3Scale\n // that may not have `ticks` field,\n // TypeScript will not let us do the `'ticks' in scale` check directly.\n // Have to manually cast and expand type first.\n var s = scale;\n\n if ('ticks' in s) {\n return s.ticks(numTicks);\n }\n\n return s.domain().filter(function (_, index, arr) {\n return numTicks == null || arr.length <= numTicks || index % Math.round((arr.length - 1) / numTicks) === 0;\n });\n}","export default function coerceNumber(val) {\n if ((typeof val === 'function' || typeof val === 'object' && !!val) && 'valueOf' in val) {\n var num = val.valueOf();\n if (typeof num === 'number') return num;\n }\n\n return val;\n}","var _excluded = [\"axisClassName\", \"labelOffset\", \"tickLabelProps\", \"tickLength\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport Axis from './Axis';\nimport Orientation from '../constants/orientation';\nexport var bottomTickLabelProps = function bottomTickLabelProps() {\n return {\n dy: '0.25em',\n fill: '#222',\n fontFamily: 'Arial',\n fontSize: 10,\n textAnchor: 'middle'\n };\n};\nexport default function AxisBottom(_ref) {\n var axisClassName = _ref.axisClassName,\n _ref$labelOffset = _ref.labelOffset,\n labelOffset = _ref$labelOffset === void 0 ? 8 : _ref$labelOffset,\n _ref$tickLabelProps = _ref.tickLabelProps,\n tickLabelProps = _ref$tickLabelProps === void 0 ? bottomTickLabelProps : _ref$tickLabelProps,\n _ref$tickLength = _ref.tickLength,\n tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(Axis, _extends({\n axisClassName: cx('visx-axis-bottom', axisClassName),\n labelOffset: labelOffset,\n orientation: Orientation.bottom,\n tickLabelProps: tickLabelProps,\n tickLength: tickLength\n }, restProps));\n}","var _excluded = [\"axisClassName\", \"labelOffset\", \"tickLabelProps\", \"tickLength\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport Axis from './Axis';\nimport Orientation from '../constants/orientation';\nexport var leftTickLabelProps = function leftTickLabelProps() {\n return {\n dx: '-0.25em',\n dy: '0.25em',\n fill: '#222',\n fontFamily: 'Arial',\n fontSize: 10,\n textAnchor: 'end'\n };\n};\nexport default function AxisLeft(_ref) {\n var axisClassName = _ref.axisClassName,\n _ref$labelOffset = _ref.labelOffset,\n labelOffset = _ref$labelOffset === void 0 ? 36 : _ref$labelOffset,\n _ref$tickLabelProps = _ref.tickLabelProps,\n tickLabelProps = _ref$tickLabelProps === void 0 ? leftTickLabelProps : _ref$tickLabelProps,\n _ref$tickLength = _ref.tickLength,\n tickLength = _ref$tickLength === void 0 ? 8 : _ref$tickLength,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(Axis, _extends({\n axisClassName: cx('visx-axis-left', axisClassName),\n labelOffset: labelOffset,\n orientation: Orientation.left,\n tickLabelProps: tickLabelProps,\n tickLength: tickLength\n }, restProps));\n}","var Orientation = {\n top: 'top',\n left: 'left',\n right: 'right',\n bottom: 'bottom'\n};\nexport default Orientation;","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { isMouseEvent, isTouchEvent } from './typeGuards';\nvar DEFAULT_POINT = {\n x: 0,\n y: 0\n};\nexport default function getXAndYFromEvent(event) {\n if (!event) return _extends({}, DEFAULT_POINT);\n\n if (isTouchEvent(event)) {\n return event.changedTouches.length > 0 ? {\n x: event.changedTouches[0].clientX,\n y: event.changedTouches[0].clientY\n } : _extends({}, DEFAULT_POINT);\n }\n\n if (isMouseEvent(event)) {\n return {\n x: event.clientX,\n y: event.clientY\n };\n } // for focus events try to extract the center position of the target element\n\n\n var target = event == null ? void 0 : event.target;\n var boundingClientRect = target && 'getBoundingClientRect' in target ? target.getBoundingClientRect() : null;\n if (!boundingClientRect) return _extends({}, DEFAULT_POINT);\n return {\n x: boundingClientRect.x + boundingClientRect.width / 2,\n y: boundingClientRect.y + boundingClientRect.height / 2\n };\n}","import { Point } from '@visx/point';\nimport { isSVGElement, isSVGGraphicsElement, isSVGSVGElement } from './typeGuards';\nimport getXAndYFromEvent from './getXAndYFromEvent';\nexport default function localPoint(node, event) {\n if (!node || !event) return null;\n var coords = getXAndYFromEvent(event); // find top-most SVG\n\n var svg = isSVGElement(node) ? node.ownerSVGElement : node;\n var screenCTM = isSVGGraphicsElement(svg) ? svg.getScreenCTM() : null;\n\n if (isSVGSVGElement(svg) && screenCTM) {\n var point = svg.createSVGPoint();\n point.x = coords.x;\n point.y = coords.y;\n point = point.matrixTransform(screenCTM.inverse());\n return new Point({\n x: point.x,\n y: point.y\n });\n } // fall back to bounding box\n\n\n var rect = node.getBoundingClientRect();\n return new Point({\n x: coords.x - rect.left - node.clientLeft,\n y: coords.y - rect.top - node.clientTop\n });\n}","export function isElement(elem) {\n return !!elem && elem instanceof Element;\n} // functional definition of isSVGElement. Note that SVGSVGElements are HTMLElements\n\nexport function isSVGElement(elem) {\n return !!elem && (elem instanceof SVGElement || 'ownerSVGElement' in elem);\n} // functional definition of SVGGElement\n\nexport function isSVGSVGElement(elem) {\n return !!elem && 'createSVGPoint' in elem;\n}\nexport function isSVGGraphicsElement(elem) {\n return !!elem && 'getScreenCTM' in elem;\n} // functional definition of TouchEvent\n\nexport function isTouchEvent(event) {\n return !!event && 'changedTouches' in event;\n} // functional definition of MouseEvent\n\nexport function isMouseEvent(event) {\n return !!event && 'clientX' in event;\n} // functional definition of event\n\nexport function isEvent(event) {\n return !!event && (event instanceof Event || 'nativeEvent' in event && event.nativeEvent instanceof Event);\n}","import localPointGeneric from './localPointGeneric';\nimport { isElement, isEvent } from './typeGuards';\n/** Handles two signatures for backwards compatibility. */\n\nexport default function localPoint(nodeOrEvent, maybeEvent) {\n // localPoint(node, event)\n if (isElement(nodeOrEvent) && maybeEvent) {\n return localPointGeneric(nodeOrEvent, maybeEvent);\n } // localPoint(event)\n\n\n if (isEvent(nodeOrEvent)) {\n var event = nodeOrEvent;\n var node = event.target;\n if (node) return localPointGeneric(node, event);\n }\n\n return null;\n}","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nexport default function LinearGradient(_ref) {\n var children = _ref.children,\n id = _ref.id,\n from = _ref.from,\n to = _ref.to,\n _x1 = _ref.x1,\n _y1 = _ref.y1,\n _x2 = _ref.x2,\n _y2 = _ref.y2,\n _ref$fromOffset = _ref.fromOffset,\n fromOffset = _ref$fromOffset === void 0 ? '0%' : _ref$fromOffset,\n _ref$fromOpacity = _ref.fromOpacity,\n fromOpacity = _ref$fromOpacity === void 0 ? 1 : _ref$fromOpacity,\n _ref$toOffset = _ref.toOffset,\n toOffset = _ref$toOffset === void 0 ? '100%' : _ref$toOffset,\n _ref$toOpacity = _ref.toOpacity,\n toOpacity = _ref$toOpacity === void 0 ? 1 : _ref$toOpacity,\n rotate = _ref.rotate,\n transform = _ref.transform,\n _ref$vertical = _ref.vertical,\n vertical = _ref$vertical === void 0 ? true : _ref$vertical,\n restProps = _objectWithoutPropertiesLoose(_ref, [\"children\", \"id\", \"from\", \"to\", \"x1\", \"y1\", \"x2\", \"y2\", \"fromOffset\", \"fromOpacity\", \"toOffset\", \"toOpacity\", \"rotate\", \"transform\", \"vertical\"]);\n\n var x1 = _x1;\n var x2 = _x2;\n var y1 = _y1;\n var y2 = _y2;\n\n if (vertical && !x1 && !x2 && !y1 && !y2) {\n x1 = '0';\n x2 = '0';\n y1 = '0';\n y2 = '1';\n }\n\n return /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", _extends({\n id: id,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n gradientTransform: rotate ? \"rotate(\" + rotate + \")\" : transform\n }, restProps), !!children && children, !children && /*#__PURE__*/React.createElement(\"stop\", {\n offset: fromOffset,\n stopColor: from,\n stopOpacity: fromOpacity\n }), !children && /*#__PURE__*/React.createElement(\"stop\", {\n offset: toOffset,\n stopColor: to,\n stopOpacity: toOpacity\n })));\n}\nLinearGradient.propTypes = {\n id: _pt.string.isRequired,\n from: _pt.string,\n to: _pt.string,\n x1: _pt.oneOfType([_pt.string, _pt.number]),\n x2: _pt.oneOfType([_pt.string, _pt.number]),\n y1: _pt.oneOfType([_pt.string, _pt.number]),\n y2: _pt.oneOfType([_pt.string, _pt.number]),\n fromOffset: _pt.oneOfType([_pt.string, _pt.number]),\n fromOpacity: _pt.oneOfType([_pt.string, _pt.number]),\n toOffset: _pt.oneOfType([_pt.string, _pt.number]),\n toOpacity: _pt.oneOfType([_pt.string, _pt.number]),\n rotate: _pt.oneOfType([_pt.string, _pt.number]),\n transform: _pt.string,\n children: _pt.node,\n vertical: _pt.bool\n};","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Group(_ref) {\n var _ref$top = _ref.top,\n top = _ref$top === void 0 ? 0 : _ref$top,\n _ref$left = _ref.left,\n left = _ref$left === void 0 ? 0 : _ref$left,\n transform = _ref.transform,\n className = _ref.className,\n children = _ref.children,\n innerRef = _ref.innerRef,\n restProps = _objectWithoutPropertiesLoose(_ref, [\"top\", \"left\", \"transform\", \"className\", \"children\", \"innerRef\"]);\n\n return /*#__PURE__*/React.createElement(\"g\", _extends({\n ref: innerRef,\n className: cx('visx-group', className),\n transform: transform || \"translate(\" + left + \", \" + top + \")\"\n }, restProps), children);\n}\nGroup.propTypes = {\n top: _pt.number,\n left: _pt.number,\n transform: _pt.string,\n className: _pt.string,\n children: _pt.node,\n innerRef: _pt.oneOfType([_pt.string, _pt.func, _pt.object])\n};","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar Point = /*#__PURE__*/function () {\n function Point(_ref) {\n var _ref$x = _ref.x,\n x = _ref$x === void 0 ? 0 : _ref$x,\n _ref$y = _ref.y,\n y = _ref$y === void 0 ? 0 : _ref$y;\n\n _defineProperty(this, \"x\", 0);\n\n _defineProperty(this, \"y\", 0);\n\n this.x = x;\n this.y = y;\n }\n\n var _proto = Point.prototype;\n\n _proto.value = function value() {\n return {\n x: this.x,\n y: this.y\n };\n };\n\n _proto.toArray = function toArray() {\n return [this.x, this.y];\n };\n\n return Point;\n}();\n\nexport { Point as default };","import _pt from \"prop-types\";\nvar _excluded = [\"className\", \"children\", \"debounceTime\", \"ignoreDimensions\", \"parentSizeStyles\", \"enableDebounceLeadingCall\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport debounce from 'lodash/debounce';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { ResizeObserver } from '@juggle/resize-observer';\nvar defaultIgnoreDimensions = [];\nexport default function ParentSize(_ref) {\n var className = _ref.className,\n children = _ref.children,\n _ref$debounceTime = _ref.debounceTime,\n debounceTime = _ref$debounceTime === void 0 ? 300 : _ref$debounceTime,\n _ref$ignoreDimensions = _ref.ignoreDimensions,\n ignoreDimensions = _ref$ignoreDimensions === void 0 ? defaultIgnoreDimensions : _ref$ignoreDimensions,\n _ref$parentSizeStyles = _ref.parentSizeStyles,\n parentSizeStyles = _ref$parentSizeStyles === void 0 ? {\n width: '100%',\n height: '100%'\n } : _ref$parentSizeStyles,\n _ref$enableDebounceLe = _ref.enableDebounceLeadingCall,\n enableDebounceLeadingCall = _ref$enableDebounceLe === void 0 ? true : _ref$enableDebounceLe,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n var target = useRef(null);\n var animationFrameID = useRef(0);\n\n var _useState = useState({\n width: 0,\n height: 0,\n top: 0,\n left: 0\n }),\n state = _useState[0],\n setState = _useState[1];\n\n var resize = useMemo(function () {\n var normalized = Array.isArray(ignoreDimensions) ? ignoreDimensions : [ignoreDimensions];\n return debounce(function (incoming) {\n setState(function (existing) {\n var stateKeys = Object.keys(existing);\n var keysWithChanges = stateKeys.filter(function (key) {\n return existing[key] !== incoming[key];\n });\n var shouldBail = keysWithChanges.every(function (key) {\n return normalized.includes(key);\n });\n return shouldBail ? existing : incoming;\n });\n }, debounceTime, {\n leading: enableDebounceLeadingCall\n });\n }, [debounceTime, enableDebounceLeadingCall, ignoreDimensions]);\n useEffect(function () {\n var observer = new ResizeObserver(function (entries\n /** , observer */\n ) {\n if (entries === void 0) {\n entries = [];\n }\n\n entries.forEach(function (entry) {\n var _entry$contentRect = entry.contentRect,\n left = _entry$contentRect.left,\n top = _entry$contentRect.top,\n width = _entry$contentRect.width,\n height = _entry$contentRect.height;\n animationFrameID.current = window.requestAnimationFrame(function () {\n resize({\n width: width,\n height: height,\n top: top,\n left: left\n });\n });\n });\n });\n if (target.current) observer.observe(target.current);\n return function () {\n window.cancelAnimationFrame(animationFrameID.current);\n observer.disconnect();\n if (resize != null && resize.cancel) resize.cancel();\n };\n }, [resize]);\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n style: parentSizeStyles,\n ref: target,\n className: className\n }, restProps), children(_extends({}, state, {\n ref: target.current,\n resize: resize\n })));\n}\nParentSize.propTypes = {\n className: _pt.string,\n debounceTime: _pt.number,\n enableDebounceLeadingCall: _pt.bool,\n ignoreDimensions: _pt.oneOfType([_pt.any, _pt.arrayOf(_pt.any)]),\n children: _pt.func.isRequired\n};","import _pt from \"prop-types\";\nimport React from 'react';\nexport default function ScaleSVG(_ref) {\n var children = _ref.children,\n width = _ref.width,\n height = _ref.height,\n _ref$xOrigin = _ref.xOrigin,\n xOrigin = _ref$xOrigin === void 0 ? 0 : _ref$xOrigin,\n _ref$yOrigin = _ref.yOrigin,\n yOrigin = _ref$yOrigin === void 0 ? 0 : _ref$yOrigin,\n _ref$preserveAspectRa = _ref.preserveAspectRatio,\n preserveAspectRatio = _ref$preserveAspectRa === void 0 ? 'xMinYMin meet' : _ref$preserveAspectRa,\n innerRef = _ref.innerRef;\n return /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'inline-block',\n position: 'relative',\n width: '100%',\n verticalAlign: 'top',\n overflow: 'hidden'\n }\n }, /*#__PURE__*/React.createElement(\"svg\", {\n preserveAspectRatio: preserveAspectRatio,\n viewBox: xOrigin + \" \" + yOrigin + \" \" + width + \" \" + height,\n ref: innerRef\n }, children));\n}\nScaleSVG.propTypes = {\n children: _pt.node,\n width: _pt.oneOfType([_pt.number, _pt.string]),\n height: _pt.oneOfType([_pt.number, _pt.string]),\n xOrigin: _pt.oneOfType([_pt.number, _pt.string]),\n yOrigin: _pt.oneOfType([_pt.number, _pt.string]),\n preserveAspectRatio: _pt.string,\n innerRef: _pt.oneOfType([_pt.string, _pt.func, _pt.object])\n};","import { interpolateRgb, interpolateLab, interpolateHcl, interpolateHclLong, interpolateHsl, interpolateHslLong, interpolateCubehelix, interpolateCubehelixLong } from 'd3-interpolate';\nvar interpolatorMap = {\n lab: interpolateLab,\n hcl: interpolateHcl,\n 'hcl-long': interpolateHclLong,\n hsl: interpolateHsl,\n 'hsl-long': interpolateHslLong,\n cubehelix: interpolateCubehelix,\n 'cubehelix-long': interpolateCubehelixLong,\n rgb: interpolateRgb\n};\nexport default function createColorInterpolator(interpolate) {\n switch (interpolate) {\n case 'lab':\n case 'hcl':\n case 'hcl-long':\n case 'hsl':\n case 'hsl-long':\n case 'cubehelix':\n case 'cubehelix-long':\n case 'rgb':\n return interpolatorMap[interpolate];\n\n default:\n }\n\n var type = interpolate.type,\n gamma = interpolate.gamma;\n var interpolator = interpolatorMap[type];\n return typeof gamma === 'undefined' ? interpolator : interpolator.gamma(gamma);\n}","var TEST_TIME = new Date(Date.UTC(2020, 1, 2, 3, 4, 5));\nvar TEST_FORMAT = '%Y-%m-%d %H:%M';\n/**\n * Check if the scale is UTC or Time scale\n * When local time is equal to UTC, always return true\n * @param scale time or utc scale\n */\n\nexport default function isUtcScale(scale) {\n // The only difference between time and utc scale is\n // whether the tick format function is utcFormat or timeFormat\n var output = scale.tickFormat(1, TEST_FORMAT)(TEST_TIME);\n return output === '2020-02-02 03:04';\n}","import { timeSecond, timeMinute, timeHour, timeDay, timeYear, timeMonth, timeWeek, utcSecond, utcMinute, utcHour, utcDay, utcWeek, utcMonth, utcYear } from 'd3-time';\nimport isUtcScale from '../utils/isUtcScale';\nvar localTimeIntervals = {\n day: timeDay,\n hour: timeHour,\n minute: timeMinute,\n month: timeMonth,\n second: timeSecond,\n week: timeWeek,\n year: timeYear\n};\nvar utcIntervals = {\n day: utcDay,\n hour: utcHour,\n minute: utcMinute,\n month: utcMonth,\n second: utcSecond,\n week: utcWeek,\n year: utcYear\n};\nexport default function applyNice(scale, config) {\n if ('nice' in config && typeof config.nice !== 'undefined' && 'nice' in scale) {\n var nice = config.nice;\n\n if (typeof nice === 'boolean') {\n if (nice) {\n scale.nice();\n }\n } else if (typeof nice === 'number') {\n scale.nice(nice);\n } else {\n var timeScale = scale;\n var isUtc = isUtcScale(timeScale);\n\n if (typeof nice === 'string') {\n timeScale.nice(isUtc ? utcIntervals[nice] : localTimeIntervals[nice]);\n } else {\n var interval = nice.interval,\n step = nice.step;\n var parsedInterval = (isUtc ? utcIntervals[interval] : localTimeIntervals[interval]).every(step);\n\n if (parsedInterval != null) {\n timeScale.nice(parsedInterval);\n }\n }\n }\n }\n}","import domain from './domain';\nimport range from './range';\nimport align from './align';\nimport base from './base';\nimport clamp from './clamp';\nimport constant from './constant';\nimport exponent from './exponent';\nimport interpolate from './interpolate';\nimport nice from './nice';\nimport padding from './padding';\nimport reverse from './reverse';\nimport round from './round';\nimport unknown from './unknown';\nimport zero from './zero';\n/**\n * List of all operators, in order of execution\n */\n\nexport var ALL_OPERATORS = [// domain => nice => zero\n'domain', 'nice', 'zero', // interpolate before round\n'interpolate', 'round', // set range then reverse\n'range', 'reverse', // Order does not matter for these operators\n'align', 'base', 'clamp', 'constant', 'exponent', 'padding', 'unknown'];\n// Use Record to enforce that all keys in OperatorType must exist.\nvar operators = {\n domain: domain,\n nice: nice,\n zero: zero,\n interpolate: interpolate,\n round: round,\n align: align,\n base: base,\n clamp: clamp,\n constant: constant,\n exponent: exponent,\n padding: padding,\n range: range,\n reverse: reverse,\n unknown: unknown\n};\nexport default function scaleOperator() {\n for (var _len = arguments.length, ops = new Array(_len), _key = 0; _key < _len; _key++) {\n ops[_key] = arguments[_key];\n }\n\n var selection = new Set(ops);\n var selectedOps = ALL_OPERATORS.filter(function (o) {\n return selection.has(o);\n });\n return function applyOperators(scale, config) {\n if (typeof config !== 'undefined') {\n selectedOps.forEach(function (op) {\n operators[op](scale, config);\n });\n }\n\n return scale;\n };\n}","export default function applyDomain(scale, config) {\n if (config.domain) {\n if ('nice' in scale || 'quantiles' in scale) {\n // continuous input scales\n scale.domain(config.domain);\n } else if ('padding' in scale) {\n // point and band scales\n scale.domain(config.domain);\n } else {\n // ordinal and threshold scale\n scale.domain(config.domain);\n }\n }\n}","export default function applyZero(scale, config) {\n if ('zero' in config && config.zero === true) {\n var domain = scale.domain();\n var a = domain[0],\n b = domain[1];\n var isDescending = b < a;\n\n var _ref = isDescending ? [b, a] : [a, b],\n min = _ref[0],\n max = _ref[1];\n\n var domainWithZero = [Math.min(0, min), Math.max(0, max)];\n scale.domain(isDescending ? domainWithZero.reverse() : domainWithZero);\n }\n}","import createColorInterpolator from '../utils/createColorInterpolator';\nexport default function applyInterpolate(scale, config) {\n if ('interpolate' in config && 'interpolate' in scale && typeof config.interpolate !== 'undefined') {\n var interpolator = createColorInterpolator(config.interpolate);\n scale.interpolate(interpolator);\n }\n}","import { interpolateRound } from 'd3-interpolate';\nexport default function applyRound(scale, config) {\n if ('round' in config && typeof config.round !== 'undefined') {\n if (config.round && 'interpolate' in config && typeof config.interpolate !== 'undefined') {\n console.warn(\"[visx/scale/applyRound] ignoring round: scale config contains round and interpolate. only applying interpolate. config:\", config);\n } else if ('round' in scale) {\n // for point and band scales\n scale.round(config.round);\n } else if ('interpolate' in scale && config.round) {\n // for continuous output scales\n // setting config.round = true\n // is actually setting interpolator to interpolateRound\n // as these scales do not have scale.round() function\n scale.interpolate(interpolateRound);\n }\n }\n}","export default function applyAlign(scale, config) {\n if ('align' in scale && 'align' in config && typeof config.align !== 'undefined') {\n scale.align(config.align);\n }\n}","export default function applyBase(scale, config) {\n if ('base' in scale && 'base' in config && typeof config.base !== 'undefined') {\n scale.base(config.base);\n }\n}","export default function applyClamp(scale, config) {\n if ('clamp' in scale && 'clamp' in config && typeof config.clamp !== 'undefined') {\n scale.clamp(config.clamp);\n }\n}","export default function applyConstant(scale, config) {\n if ('constant' in scale && 'constant' in config && typeof config.constant !== 'undefined') {\n scale.constant(config.constant);\n }\n}","export default function applyExponent(scale, config) {\n if ('exponent' in scale && 'exponent' in config && typeof config.exponent !== 'undefined') {\n scale.exponent(config.exponent);\n }\n}","export default function applyPadding(scale, config) {\n if ('padding' in scale && 'padding' in config && typeof config.padding !== 'undefined') {\n scale.padding(config.padding);\n }\n\n if ('paddingInner' in scale && 'paddingInner' in config && typeof config.paddingInner !== 'undefined') {\n scale.paddingInner(config.paddingInner);\n }\n\n if ('paddingOuter' in scale && 'paddingOuter' in config && typeof config.paddingOuter !== 'undefined') {\n scale.paddingOuter(config.paddingOuter);\n }\n}","export default function applyRange(scale, config) {\n if (config.range) {\n if ('padding' in scale) {\n // point and band scales\n scale.range(config.range);\n } else {\n // the rest\n scale.range(config.range);\n }\n }\n}","export default function applyReverse(scale, config) {\n if (config.reverse) {\n var reversedRange = scale.range().slice().reverse();\n\n if ('padding' in scale) {\n // point and band scales\n scale.range(reversedRange);\n } else {\n // the rest\n scale.range(reversedRange);\n }\n }\n}","export default function applyUnknown(scale, config) {\n if ('unknown' in scale && 'unknown' in config && typeof config.unknown !== 'undefined') {\n scale.unknown(config.unknown);\n }\n}","import { scaleLinear } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateLinearScale = scaleOperator('domain', 'range', 'reverse', 'clamp', 'interpolate', 'nice', 'round', 'zero');\nexport default function createLinearScale(config) {\n return updateLinearScale(scaleLinear(), config);\n}","import { scaleTime } from 'd3-scale';\nimport scaleOperator from '../operators/scaleOperator';\nexport var updateTimeScale = scaleOperator('domain', 'range', 'reverse', 'clamp', 'interpolate', 'nice', 'round');\nexport default function createTimeScale(config) {\n return updateTimeScale(scaleTime(), config);\n}","var _excluded = [\"x\", \"x0\", \"x1\", \"y\", \"y1\", \"y0\", \"yScale\", \"data\", \"defined\", \"className\", \"curve\", \"innerRef\", \"children\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport setNumOrAccessor from '../util/setNumberOrNumberAccessor';\nimport { area } from '../util/D3ShapeFactories';\nexport default function AreaClosed(_ref) {\n var x = _ref.x,\n x0 = _ref.x0,\n x1 = _ref.x1,\n y = _ref.y,\n y1 = _ref.y1,\n y0 = _ref.y0,\n yScale = _ref.yScale,\n _ref$data = _ref.data,\n data = _ref$data === void 0 ? [] : _ref$data,\n _ref$defined = _ref.defined,\n defined = _ref$defined === void 0 ? function () {\n return true;\n } : _ref$defined,\n className = _ref.className,\n curve = _ref.curve,\n innerRef = _ref.innerRef,\n children = _ref.children,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n var path = area({\n x: x,\n x0: x0,\n x1: x1,\n defined: defined,\n curve: curve\n });\n\n if (y0 == null) {\n /**\n * by default set the baseline to the first element of the yRange\n * @TODO take the minimum instead?\n */\n path.y0(yScale.range()[0]);\n } else {\n setNumOrAccessor(path.y0, y0);\n }\n\n if (y && !y1) setNumOrAccessor(path.y1, y);\n if (y1 && !y) setNumOrAccessor(path.y1, y1);\n if (children) return /*#__PURE__*/React.createElement(React.Fragment, null, children({\n path: path\n }));\n return /*#__PURE__*/React.createElement(\"path\", _extends({\n ref: innerRef,\n className: cx('visx-area-closed', className),\n d: path(data) || ''\n }, restProps));\n}","var _excluded = [\"className\", \"innerRef\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Bar(_ref) {\n var className = _ref.className,\n innerRef = _ref.innerRef,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"rect\", _extends({\n ref: innerRef,\n className: cx('visx-bar', className)\n }, restProps));\n}","var _excluded = [\"from\", \"to\", \"fill\", \"className\", \"innerRef\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport default function Line(_ref) {\n var _ref$from = _ref.from,\n from = _ref$from === void 0 ? {\n x: 0,\n y: 0\n } : _ref$from,\n _ref$to = _ref.to,\n to = _ref$to === void 0 ? {\n x: 1,\n y: 1\n } : _ref$to,\n _ref$fill = _ref.fill,\n fill = _ref$fill === void 0 ? 'transparent' : _ref$fill,\n className = _ref.className,\n innerRef = _ref.innerRef,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n var isRectilinear = from.x === to.x || from.y === to.y;\n return /*#__PURE__*/React.createElement(\"line\", _extends({\n ref: innerRef,\n className: cx('visx-line', className),\n x1: from.x,\n y1: from.y,\n x2: to.x,\n y2: to.y,\n fill: fill,\n shapeRendering: isRectilinear ? 'crispEdges' : 'auto'\n }, restProps));\n}","var _excluded = [\"children\", \"data\", \"x\", \"y\", \"fill\", \"className\", \"curve\", \"innerRef\", \"defined\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nimport { line } from '../util/D3ShapeFactories';\nexport default function LinePath(_ref) {\n var children = _ref.children,\n _ref$data = _ref.data,\n data = _ref$data === void 0 ? [] : _ref$data,\n x = _ref.x,\n y = _ref.y,\n _ref$fill = _ref.fill,\n fill = _ref$fill === void 0 ? 'transparent' : _ref$fill,\n className = _ref.className,\n curve = _ref.curve,\n innerRef = _ref.innerRef,\n _ref$defined = _ref.defined,\n defined = _ref$defined === void 0 ? function () {\n return true;\n } : _ref$defined,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n var path = line({\n x: x,\n y: y,\n defined: defined,\n curve: curve\n });\n if (children) return /*#__PURE__*/React.createElement(React.Fragment, null, children({\n path: path\n }));\n return /*#__PURE__*/React.createElement(\"path\", _extends({\n ref: innerRef,\n className: cx('visx-linepath', className),\n d: path(data) || '',\n fill: fill // without this a datum surrounded by nulls will not be visible\n // https://github.com/d3/d3-shape#line_defined\n ,\n strokeLinecap: \"round\"\n }, restProps));\n}","import { arc as d3Arc, area as d3Area, line as d3Line, pie as d3Pie, radialLine as d3RadialLine, stack as d3Stack } from 'd3-shape';\nimport setNumberOrNumberAccessor from './setNumberOrNumberAccessor';\nimport stackOrder from './stackOrder';\nimport stackOffset from './stackOffset';\nexport function arc(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n innerRadius = _ref.innerRadius,\n outerRadius = _ref.outerRadius,\n cornerRadius = _ref.cornerRadius,\n startAngle = _ref.startAngle,\n endAngle = _ref.endAngle,\n padAngle = _ref.padAngle,\n padRadius = _ref.padRadius;\n\n var path = d3Arc();\n if (innerRadius != null) setNumberOrNumberAccessor(path.innerRadius, innerRadius);\n if (outerRadius != null) setNumberOrNumberAccessor(path.outerRadius, outerRadius);\n if (cornerRadius != null) setNumberOrNumberAccessor(path.cornerRadius, cornerRadius);\n if (startAngle != null) setNumberOrNumberAccessor(path.startAngle, startAngle);\n if (endAngle != null) setNumberOrNumberAccessor(path.endAngle, endAngle);\n if (padAngle != null) setNumberOrNumberAccessor(path.padAngle, padAngle);\n if (padRadius != null) setNumberOrNumberAccessor(path.padRadius, padRadius);\n return path;\n}\nexport function area(_temp2) {\n var _ref2 = _temp2 === void 0 ? {} : _temp2,\n x = _ref2.x,\n x0 = _ref2.x0,\n x1 = _ref2.x1,\n y = _ref2.y,\n y0 = _ref2.y0,\n y1 = _ref2.y1,\n defined = _ref2.defined,\n curve = _ref2.curve;\n\n var path = d3Area();\n if (x) setNumberOrNumberAccessor(path.x, x);\n if (x0) setNumberOrNumberAccessor(path.x0, x0);\n if (x1) setNumberOrNumberAccessor(path.x1, x1);\n if (y) setNumberOrNumberAccessor(path.y, y);\n if (y0) setNumberOrNumberAccessor(path.y0, y0);\n if (y1) setNumberOrNumberAccessor(path.y1, y1);\n if (defined) path.defined(defined);\n if (curve) path.curve(curve);\n return path;\n}\nexport function line(_temp3) {\n var _ref3 = _temp3 === void 0 ? {} : _temp3,\n x = _ref3.x,\n y = _ref3.y,\n defined = _ref3.defined,\n curve = _ref3.curve;\n\n var path = d3Line();\n if (x) setNumberOrNumberAccessor(path.x, x);\n if (y) setNumberOrNumberAccessor(path.y, y);\n if (defined) path.defined(defined);\n if (curve) path.curve(curve);\n return path;\n}\nexport function pie(_temp4) {\n var _ref4 = _temp4 === void 0 ? {} : _temp4,\n startAngle = _ref4.startAngle,\n endAngle = _ref4.endAngle,\n padAngle = _ref4.padAngle,\n value = _ref4.value,\n sort = _ref4.sort,\n sortValues = _ref4.sortValues;\n\n var path = d3Pie(); // ts can't distinguish between these method overloads\n\n if (sort === null) path.sort(sort);else if (sort != null) path.sort(sort);\n if (sortValues === null) path.sortValues(sortValues);else if (sortValues != null) path.sortValues(sortValues);\n if (value != null) path.value(value);\n if (padAngle != null) setNumberOrNumberAccessor(path.padAngle, padAngle);\n if (startAngle != null) setNumberOrNumberAccessor(path.startAngle, startAngle);\n if (endAngle != null) setNumberOrNumberAccessor(path.endAngle, endAngle);\n return path;\n}\nexport function radialLine(_temp5) {\n var _ref5 = _temp5 === void 0 ? {} : _temp5,\n angle = _ref5.angle,\n radius = _ref5.radius,\n defined = _ref5.defined,\n curve = _ref5.curve;\n\n var path = d3RadialLine();\n if (angle) setNumberOrNumberAccessor(path.angle, angle);\n if (radius) setNumberOrNumberAccessor(path.radius, radius);\n if (defined) path.defined(defined);\n if (curve) path.curve(curve);\n return path;\n}\nexport function stack(_ref6) {\n var keys = _ref6.keys,\n value = _ref6.value,\n order = _ref6.order,\n offset = _ref6.offset;\n var path = d3Stack();\n if (keys) path.keys(keys);\n if (value) setNumberOrNumberAccessor(path.value, value);\n if (order) path.order(stackOrder(order));\n if (offset) path.offset(stackOffset(offset));\n return path;\n}","/**\n * This is a workaround for TypeScript not inferring the correct\n * method overload/signature for some d3 shape methods.\n */\nexport default function setNumberOrNumberAccessor(func, value) {\n if (typeof value === 'number') func(value);else func(value);\n}","import memoize from 'lodash/memoize';\nvar MEASUREMENT_ELEMENT_ID = '__react_svg_text_measurement_id';\n\nfunction getStringWidth(str, style) {\n try {\n // Calculate length of each word to be used to determine number of words per line\n var textEl = document.getElementById(MEASUREMENT_ELEMENT_ID);\n\n if (!textEl) {\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.style.width = '0';\n svg.style.height = '0';\n svg.style.position = 'absolute';\n svg.style.top = '-100%';\n svg.style.left = '-100%';\n textEl = document.createElementNS('http://www.w3.org/2000/svg', 'text');\n textEl.setAttribute('id', MEASUREMENT_ELEMENT_ID);\n svg.appendChild(textEl);\n document.body.appendChild(svg);\n }\n\n Object.assign(textEl.style, style);\n textEl.textContent = str;\n return textEl.getComputedTextLength();\n } catch (e) {\n return null;\n }\n}\n\nexport default memoize(getStringWidth, function (str, style) {\n return str + \"_\" + JSON.stringify(style);\n});","var _excluded = [\"verticalAnchor\", \"scaleToFit\", \"angle\", \"width\", \"lineHeight\", \"capHeight\", \"children\", \"style\"];\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React, { useMemo } from 'react';\nimport reduceCSSCalc from 'reduce-css-calc';\nimport getStringWidth from '../util/getStringWidth';\n\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\nfunction isXOrYInValid(xOrY) {\n return (// number that is not NaN or Infinity\n typeof xOrY === 'number' && Number.isFinite(xOrY) || // for percentage\n typeof xOrY === 'string'\n );\n}\n\nexport default function useText(props) {\n var _props$verticalAnchor = props.verticalAnchor,\n verticalAnchor = _props$verticalAnchor === void 0 ? 'end' : _props$verticalAnchor,\n _props$scaleToFit = props.scaleToFit,\n scaleToFit = _props$scaleToFit === void 0 ? false : _props$scaleToFit,\n angle = props.angle,\n width = props.width,\n _props$lineHeight = props.lineHeight,\n lineHeight = _props$lineHeight === void 0 ? '1em' : _props$lineHeight,\n _props$capHeight = props.capHeight,\n capHeight = _props$capHeight === void 0 ? '0.71em' : _props$capHeight,\n children = props.children,\n style = props.style,\n textProps = _objectWithoutPropertiesLoose(props, _excluded);\n\n var _textProps$x = textProps.x,\n x = _textProps$x === void 0 ? 0 : _textProps$x,\n _textProps$y = textProps.y,\n y = _textProps$y === void 0 ? 0 : _textProps$y;\n var isXOrYNotValid = !isXOrYInValid(x) || !isXOrYInValid(y);\n\n var _useMemo = useMemo(function () {\n var words = children == null ? [] : children.toString().split(/(?:(?!\\u00A0+)\\s+)/);\n return {\n wordsWithWidth: words.map(function (word) {\n return {\n word: word,\n wordWidth: getStringWidth(word, style) || 0\n };\n }),\n spaceWidth: getStringWidth(\"\\xA0\", style) || 0\n };\n }, [children, style]),\n wordsWithWidth = _useMemo.wordsWithWidth,\n spaceWidth = _useMemo.spaceWidth;\n\n var wordsByLines = useMemo(function () {\n if (isXOrYNotValid) {\n return [];\n } // Only perform calculations if using features that require them (multiline, scaleToFit)\n\n\n if (width || scaleToFit) {\n return wordsWithWidth.reduce(function (result, _ref) {\n var word = _ref.word,\n wordWidth = _ref.wordWidth;\n var currentLine = result[result.length - 1];\n\n if (currentLine && (width == null || scaleToFit || (currentLine.width || 0) + wordWidth + spaceWidth < width)) {\n // Word can be added to an existing line\n currentLine.words.push(word);\n currentLine.width = currentLine.width || 0;\n currentLine.width += wordWidth + spaceWidth;\n } else {\n // Add first word to line or word is too long to scaleToFit on existing line\n var newLine = {\n words: [word],\n width: wordWidth\n };\n result.push(newLine);\n }\n\n return result;\n }, []);\n }\n\n return [{\n words: children == null ? [] : children.toString().split(/(?:(?!\\u00A0+)\\s+)/)\n }];\n }, [isXOrYNotValid, width, scaleToFit, children, wordsWithWidth, spaceWidth]);\n var startDy = useMemo(function () {\n var startDyStr = isXOrYNotValid ? '' : verticalAnchor === 'start' ? reduceCSSCalc(\"calc(\" + capHeight + \")\") : verticalAnchor === 'middle' ? reduceCSSCalc(\"calc(\" + (wordsByLines.length - 1) / 2 + \" * -\" + lineHeight + \" + (\" + capHeight + \" / 2))\") : reduceCSSCalc(\"calc(\" + (wordsByLines.length - 1) + \" * -\" + lineHeight + \")\");\n return startDyStr;\n }, [isXOrYNotValid, verticalAnchor, capHeight, wordsByLines.length, lineHeight]);\n var transform = useMemo(function () {\n var transforms = [];\n\n if (isXOrYNotValid) {\n return '';\n }\n\n if (isNumber(x) && isNumber(y) && isNumber(width) && scaleToFit && wordsByLines.length > 0) {\n var lineWidth = wordsByLines[0].width || 1;\n var sx = scaleToFit === 'shrink-only' ? Math.min(width / lineWidth, 1) : width / lineWidth;\n var sy = sx;\n var originX = x - sx * x;\n var originY = y - sy * y;\n transforms.push(\"matrix(\" + sx + \", 0, 0, \" + sy + \", \" + originX + \", \" + originY + \")\");\n }\n\n if (angle) {\n transforms.push(\"rotate(\" + angle + \", \" + x + \", \" + y + \")\");\n }\n\n return transforms.length > 0 ? transforms.join(' ') : '';\n }, [isXOrYNotValid, x, y, width, scaleToFit, wordsByLines, angle]);\n return {\n wordsByLines: wordsByLines,\n startDy: startDy,\n transform: transform\n };\n}","var _excluded = [\"dx\", \"dy\", \"textAnchor\", \"innerRef\", \"innerTextRef\", \"verticalAnchor\", \"angle\", \"lineHeight\", \"scaleToFit\", \"capHeight\", \"width\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport useText from './hooks/useText';\nvar SVG_STYLE = {\n overflow: 'visible'\n};\nexport default function Text(props) {\n var _props$dx = props.dx,\n dx = _props$dx === void 0 ? 0 : _props$dx,\n _props$dy = props.dy,\n dy = _props$dy === void 0 ? 0 : _props$dy,\n _props$textAnchor = props.textAnchor,\n textAnchor = _props$textAnchor === void 0 ? 'start' : _props$textAnchor,\n innerRef = props.innerRef,\n innerTextRef = props.innerTextRef,\n verticalAnchor = props.verticalAnchor,\n angle = props.angle,\n _props$lineHeight = props.lineHeight,\n lineHeight = _props$lineHeight === void 0 ? '1em' : _props$lineHeight,\n _props$scaleToFit = props.scaleToFit,\n scaleToFit = _props$scaleToFit === void 0 ? false : _props$scaleToFit,\n capHeight = props.capHeight,\n width = props.width,\n textProps = _objectWithoutPropertiesLoose(props, _excluded);\n\n var _textProps$x = textProps.x,\n x = _textProps$x === void 0 ? 0 : _textProps$x,\n fontSize = textProps.fontSize;\n\n var _useText = useText(props),\n wordsByLines = _useText.wordsByLines,\n startDy = _useText.startDy,\n transform = _useText.transform;\n\n return /*#__PURE__*/React.createElement(\"svg\", {\n ref: innerRef,\n x: dx,\n y: dy,\n fontSize: fontSize,\n style: SVG_STYLE\n }, wordsByLines.length > 0 ? /*#__PURE__*/React.createElement(\"text\", _extends({\n ref: innerTextRef,\n transform: transform\n }, textProps, {\n textAnchor: textAnchor\n }), wordsByLines.map(function (line, index) {\n return /*#__PURE__*/React.createElement(\"tspan\", {\n key: index,\n x: x,\n dy: index === 0 ? startDy : lineHeight\n }, line.words.join(' '));\n })) : null);\n}","var _excluded = [\"tooltipOpen\"];\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React, { useState, useCallback } from 'react';\nexport default function useTooltip(\n/** Optional initial TooltipState. */\ninitialTooltipState) {\n var _useState = useState(_extends({\n tooltipOpen: false\n }, initialTooltipState)),\n tooltipState = _useState[0],\n setTooltipState = _useState[1];\n\n var showTooltip = useCallback(function (showArgs) {\n return setTooltipState(typeof showArgs === 'function' ? function (_ref) {\n var tooltipOpen = _ref.tooltipOpen,\n show = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return _extends({}, showArgs(show), {\n tooltipOpen: true\n });\n } : {\n tooltipOpen: true,\n tooltipLeft: showArgs.tooltipLeft,\n tooltipTop: showArgs.tooltipTop,\n tooltipData: showArgs.tooltipData\n });\n }, [setTooltipState]);\n var hideTooltip = useCallback(function () {\n return setTooltipState({\n tooltipOpen: false,\n tooltipLeft: undefined,\n tooltipTop: undefined,\n tooltipData: undefined\n });\n }, [setTooltipState]);\n return {\n tooltipOpen: tooltipState.tooltipOpen,\n tooltipLeft: tooltipState.tooltipLeft,\n tooltipTop: tooltipState.tooltipTop,\n tooltipData: tooltipState.tooltipData,\n updateTooltip: setTooltipState,\n showTooltip: showTooltip,\n hideTooltip: hideTooltip\n };\n}","import _pt from \"prop-types\";\nvar _excluded = [\"className\", \"top\", \"left\", \"offsetLeft\", \"offsetTop\", \"style\", \"children\", \"unstyled\", \"applyPositionStyle\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport cx from 'classnames';\nexport var defaultStyles = {\n position: 'absolute',\n backgroundColor: 'white',\n color: '#666666',\n padding: '.3rem .5rem',\n borderRadius: '3px',\n fontSize: '14px',\n boxShadow: '0 1px 2px rgba(33,33,33,0.2)',\n lineHeight: '1em',\n pointerEvents: 'none'\n};\nexport default function Tooltip(_ref) {\n var className = _ref.className,\n top = _ref.top,\n left = _ref.left,\n _ref$offsetLeft = _ref.offsetLeft,\n offsetLeft = _ref$offsetLeft === void 0 ? 10 : _ref$offsetLeft,\n _ref$offsetTop = _ref.offsetTop,\n offsetTop = _ref$offsetTop === void 0 ? 10 : _ref$offsetTop,\n _ref$style = _ref.style,\n style = _ref$style === void 0 ? defaultStyles : _ref$style,\n children = _ref.children,\n _ref$unstyled = _ref.unstyled,\n unstyled = _ref$unstyled === void 0 ? false : _ref$unstyled,\n _ref$applyPositionSty = _ref.applyPositionStyle,\n applyPositionStyle = _ref$applyPositionSty === void 0 ? false : _ref$applyPositionSty,\n restProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n className: cx('visx-tooltip', className),\n style: _extends({\n top: top == null || offsetTop == null ? top : top + offsetTop,\n left: left == null || offsetLeft == null ? left : left + offsetLeft\n }, applyPositionStyle && {\n position: 'absolute'\n }, !unstyled && style)\n }, restProps), children);\n}\nTooltip.propTypes = {\n children: _pt.node,\n className: _pt.string,\n left: _pt.number,\n offsetLeft: _pt.number,\n offsetTop: _pt.number,\n top: _pt.number,\n applyPositionStyle: _pt.bool,\n unstyled: _pt.bool\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/* eslint react/no-did-mount-set-state: 0, react/no-find-dom-node: 0 */\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nvar emptyRect = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n width: 0,\n height: 0\n};\nexport default function withBoundingRects(BaseComponent) {\n var _class, _temp;\n\n return _temp = _class = /*#__PURE__*/function (_React$PureComponent) {\n _inheritsLoose(WrappedComponent, _React$PureComponent);\n\n function WrappedComponent(props) {\n var _this;\n\n _this = _React$PureComponent.call(this, props) || this;\n\n _defineProperty(_assertThisInitialized(_this), \"node\", void 0);\n\n _this.state = {\n rect: undefined,\n parentRect: undefined\n };\n _this.getRects = _this.getRects.bind(_assertThisInitialized(_this));\n return _this;\n }\n\n var _proto = WrappedComponent.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n this.node = ReactDOM.findDOMNode(this);\n this.setState(function () {\n return _this2.getRects();\n });\n };\n\n _proto.getRects = function getRects() {\n if (!this.node) return this.state;\n var node = this.node;\n var parentNode = node.parentNode;\n var rect = node.getBoundingClientRect ? node.getBoundingClientRect() : emptyRect;\n var parentRect = parentNode != null && parentNode.getBoundingClientRect ? parentNode.getBoundingClientRect() : emptyRect;\n return {\n rect: rect,\n parentRect: parentRect\n };\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(BaseComponent, _extends({\n getRects: this.getRects\n }, this.state, this.props));\n };\n\n return WrappedComponent;\n }(React.PureComponent), _defineProperty(_class, \"displayName\", \"withBoundingRects(\" + (BaseComponent.displayName || '') + \")\"), _temp;\n}","var _excluded = [\"children\", \"getRects\", \"left\", \"offsetLeft\", \"offsetTop\", \"parentRect\", \"rect\", \"style\", \"top\", \"unstyled\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from 'react';\nimport { withBoundingRects } from '@visx/bounds';\nimport Tooltip, { defaultStyles } from './Tooltip';\n\nfunction TooltipWithBounds(_ref) {\n var children = _ref.children,\n getRects = _ref.getRects,\n _ref$left = _ref.left,\n initialLeft = _ref$left === void 0 ? 0 : _ref$left,\n _ref$offsetLeft = _ref.offsetLeft,\n offsetLeft = _ref$offsetLeft === void 0 ? 10 : _ref$offsetLeft,\n _ref$offsetTop = _ref.offsetTop,\n offsetTop = _ref$offsetTop === void 0 ? 10 : _ref$offsetTop,\n parentBounds = _ref.parentRect,\n ownBounds = _ref.rect,\n _ref$style = _ref.style,\n style = _ref$style === void 0 ? defaultStyles : _ref$style,\n _ref$top = _ref.top,\n initialTop = _ref$top === void 0 ? 0 : _ref$top,\n _ref$unstyled = _ref.unstyled,\n unstyled = _ref$unstyled === void 0 ? false : _ref$unstyled,\n otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n var transform;\n\n if (ownBounds && parentBounds) {\n var left = initialLeft;\n var top = initialTop;\n var placeTooltipLeft = false;\n var placeTooltipUp = false;\n\n if (parentBounds.width) {\n var rightPlacementClippedPx = left + offsetLeft + ownBounds.width - parentBounds.width;\n var leftPlacementClippedPx = ownBounds.width - left - offsetLeft;\n placeTooltipLeft = rightPlacementClippedPx > 0 && rightPlacementClippedPx > leftPlacementClippedPx;\n } else {\n var _rightPlacementClippedPx = left + offsetLeft + ownBounds.width - window.innerWidth;\n\n var _leftPlacementClippedPx = ownBounds.width - left - offsetLeft;\n\n placeTooltipLeft = _rightPlacementClippedPx > 0 && _rightPlacementClippedPx > _leftPlacementClippedPx;\n }\n\n if (parentBounds.height) {\n var bottomPlacementClippedPx = top + offsetTop + ownBounds.height - parentBounds.height;\n var topPlacementClippedPx = ownBounds.height - top - offsetTop;\n placeTooltipUp = bottomPlacementClippedPx > 0 && bottomPlacementClippedPx > topPlacementClippedPx;\n } else {\n placeTooltipUp = top + offsetTop + ownBounds.height > window.innerHeight;\n }\n\n left = placeTooltipLeft ? left - ownBounds.width - offsetLeft : left + offsetLeft;\n top = placeTooltipUp ? top - ownBounds.height - offsetTop : top + offsetTop;\n left = Math.round(left);\n top = Math.round(top);\n transform = \"translate(\" + left + \"px, \" + top + \"px)\";\n }\n\n return /*#__PURE__*/React.createElement(Tooltip, _extends({\n style: _extends({\n left: 0,\n top: 0,\n transform: transform\n }, !unstyled && style)\n }, otherProps), children);\n}\n\nexport default withBoundingRects(TooltipWithBounds);","\n'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./sdk.cjs.production.min.js')\n} else {\n module.exports = require('./sdk.cjs.development.js')\n}\n","export class CustomError extends Error {\n error_type: string;\n\n constructor(message: string, error_type: string) {\n super(message);\n this.error_type = error_type;\n }\n}\n\n/**\n * Generic SDK error. Wrapped errors are:\n *\n * - ethers.js errors\n * - http request errors\n */\nexport class SdkError extends CustomError {\n error_code?: string;\n static NO_SLIPPAGE = \"no_slippage\";\n\n constructor(message: string, error_code?: string) {\n super(message, \"sdk\");\n this.error_code = error_code;\n }\n}\n\n/**\n * Type alias for an address type.\n */\nexport type Address = string;\n\n/**\n * Type alias for a stringified big number. SDK tries to be bignumber-lib\n * agnostic so integer values are returned as strings.\n */\nexport type Integer = string;\n\n/**\n * Utility type to help distinguish [[Integer]]s that represent a USDC (6 dec)\n * value.\n */\nexport type Usdc = string;\n\n/**\n * Utility type to describe a map of predefined keys with the same value.\n */\nexport type TypedMap = { [key in K]: V };\n","import { Address, CustomError, Integer, Usdc } from \"../common\";\n\nexport class SimulationError extends CustomError {\n error_code: string;\n static NO_LOG = \"no_log\";\n static TENDERLY_RESPONSE_ERROR = \"tenderly_response_error\";\n static PARTIAL_REVERT = \"partial_revert\";\n\n constructor(message: string, error_code: string) {\n super(message, \"simulation\");\n this.error_code = error_code;\n }\n}\n\nexport class ZapperError extends CustomError {\n error_code: string;\n static ZAP_IN_APPROVAL_STATE = \"zap_in_approval_state\";\n static ZAP_IN_APPROVAL = \"zap_in_approval\";\n static ZAP_OUT_APPROVAL_STATE = \"zap_out_approval_state\";\n static ZAP_OUT_APPROVAL = \"zap_out_approval\";\n static ZAP_IN = \"zap_in\";\n static ZAP_OUT = \"zap_out\";\n\n constructor(message: string, error_code: string) {\n super(message, \"zapper\");\n this.error_code = error_code;\n }\n}\nexport class EthersError extends CustomError {\n error_code: string;\n static FAIL_TOKEN_FETCH = \"fail_token_fetch\";\n static NO_DECIMALS = \"no_decimals\";\n static NO_PRICE_PER_SHARE = \"no_price_per_share\";\n static POPULATING_TRANSACTION = \"populating_transaction\";\n\n constructor(message: string, error_code: string) {\n super(message, \"ethers\");\n this.error_code = error_code;\n }\n}\nexport class TenderlyError extends CustomError {\n error_code: string;\n static SIMULATION_CALL = \"simulation_call\";\n static CREATE_FORK = \"create_fork\";\n\n constructor(message: string, error_code: string) {\n super(message, \"tenderly\");\n this.error_code = error_code;\n }\n}\nexport class PriceFetchingError extends CustomError {\n error_code: string;\n static FETCHING_PRICE_ORACLE = \"fetching_price_oracle\";\n static FETCHING_PRICE_PICKLE = \"fetching_price_pickle\";\n\n constructor(message: string, error_code: string) {\n super(message, \"price_fetching\");\n this.error_code = error_code;\n }\n}\n\nexport interface TransactionOutcome {\n sourceTokenAddress: Address;\n sourceTokenAmount: Integer;\n targetTokenAddress: Address;\n targetTokenAmount: Integer;\n targetTokenAmountUsdc: Usdc;\n targetUnderlyingTokenAddress: Address;\n targetUnderlyingTokenAmount: Integer;\n conversionRate: number;\n slippage: number;\n}\n\nexport interface SimulationOptions {\n slippage?: number;\n root?: string;\n forkId?: string;\n gasPrice?: Integer;\n maxFeePerGas?: Integer;\n maxPriorityFeePerGas?: Integer;\n gasLimit?: Integer;\n save?: boolean;\n}\n","import { Address, Integer } from \"../common\";\n\n/**\n * Simple gas prices in gwei\n */\nexport interface GasPrice {\n standard: number;\n instant: number;\n fast: number;\n}\n\nexport interface ZapOptions {\n slippage?: number;\n gas?: keyof GasPrice;\n}\n\nexport interface ZapApprovalStateOutput {\n spenderAddress: Address;\n tokenAddress: Address;\n ownerAddress: Address;\n allowance: Integer;\n amount: Integer;\n isApproved: Boolean;\n}\n\nexport interface ZapApprovalTransactionOutput {\n data: string;\n to: Address;\n from: Address;\n gasPrice: Integer;\n}\n\nexport interface ZapOutput {\n to: Address;\n from: Address;\n data: string;\n value: string;\n sellTokenAddress: Address;\n sellTokenAmount: Integer;\n buyTokenAddress: Address;\n minTokens: Integer;\n gasPrice: Integer;\n gas: Integer;\n}\n\nexport enum ZapProtocol {\n PICKLE = \"pickle\",\n YEARN = \"yearn\"\n}\n","import { JsonRpcProvider } from \"@ethersproject/providers\";\nimport EventEmitter from \"events\";\nimport { PartialDeep } from \"type-fest\";\n\nimport { Address, SdkError } from \"./types\";\n\nexport interface AddressesOverride {\n lens?: Address;\n oracle?: Address;\n adapters: {\n registryV2?: Address;\n ironBank?: Address;\n };\n helper?: Address;\n allowList?: Address;\n}\n\n/**\n * For particular situations it's helpful to have two separate providers, one\n * for reading data and one for writing data.\n */\nexport interface ReadWriteProvider {\n read: JsonRpcProvider;\n write: JsonRpcProvider;\n}\n\n/**\n * To provide configuration for simulation error reporting\n */\nexport interface SimulationConfiguration extends TelegramConfiguration {\n dashboardUrl?: string;\n}\n\n/**\n * Provides details about sending a message from a telegram bot to a\n * specific chat\n */\nexport interface TelegramConfiguration {\n telegramChatId?: string;\n telegramBotId?: string;\n}\n\nexport interface CacheConfiguration {\n useCache: boolean;\n url?: string;\n}\n\n/**\n * Context options that are used to access all the data sources queried by the\n * SDK.\n */\nexport interface ContextValue {\n provider?: JsonRpcProvider | ReadWriteProvider;\n zapper?: string;\n etherscan?: string;\n addresses?: PartialDeep;\n simulation?: SimulationConfiguration;\n cache?: CacheConfiguration;\n}\n\nconst DefaultContext: ContextValue = {\n // Public API key provided by zapper.\n // see https://docs.zapper.fi/zapper-api/endpoints\n zapper: \"96e0cc51-a62e-42ca-acee-910ea7d2a241\",\n // The default tenderly dashboard for Yearn\n simulation: { dashboardUrl: \"https://dashboard.tenderly.co/yearn/yearn-web\" },\n cache: { useCache: true, url: \"https://cache.yearn.finance\" }\n};\n\n/**\n * [[Context]] is the configuration object passed around every function in\n * the SDK. It contains basic information on how to access the various services\n * that the SDK aggregates.\n *\n * [[Context]] **should not** be instantiated by users, as it's managed by\n * {@link Yearn.context}.\n */\nexport class Context implements Required {\n static PROVIDER = \"refresh:provider\";\n\n private ctx: ContextValue;\n\n /**\n * For internal events only.\n */\n events: EventEmitter;\n\n constructor(ctx: ContextValue) {\n this.ctx = Object.assign({}, DefaultContext, ctx);\n this.events = new EventEmitter().setMaxListeners(100);\n this.setProvider(ctx.provider);\n }\n\n /**\n * Change providers during executions for all services that require on-chain\n * interaction.\n * @param provider new provider(s)\n */\n setProvider(provider?: JsonRpcProvider | ReadWriteProvider) {\n if (provider instanceof JsonRpcProvider) {\n this.ctx.provider = { read: provider, write: provider };\n } else if (provider) {\n this.ctx.provider = provider;\n }\n this.events.emit(Context.PROVIDER, this.ctx.provider);\n }\n\n get provider(): ReadWriteProvider {\n if (this.ctx.provider) return this.ctx.provider as ReadWriteProvider;\n throw new SdkError(\"provider must be undefined in Context for this feature to work.\");\n }\n\n get zapper(): string {\n if (this.ctx.zapper) return this.ctx.zapper;\n throw new SdkError(\"zapper must be undefined in Context for this feature to work.\");\n }\n\n get etherscan(): string {\n if (this.ctx.etherscan) return this.ctx.etherscan;\n throw new SdkError(\"etherscan must be undefined in Context for this feature to work.\");\n }\n\n get addresses(): AddressesOverride {\n return Object.assign({ adapters: {} }, this.ctx.addresses);\n }\n\n get simulation(): SimulationConfiguration {\n if (this.ctx.simulation) return this.ctx.simulation;\n throw new SdkError(\"simulation configuration must be defined in Context for this feature to work.\");\n }\n\n get cache(): CacheConfiguration {\n if (this.ctx.cache) return this.ctx.cache;\n throw new SdkError(\"cache must be defined in Context for this feature to work.\");\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import { ChainId } from \"./chain\";\nimport { Context } from \"./context\";\n\nexport class CachedFetcher {\n expiryDate?: Date;\n cachedValue?: T;\n path: string;\n ctx: Context;\n chainId: ChainId;\n\n constructor(path: string, ctx: Context, chainId: ChainId) {\n this.path = path;\n this.ctx = ctx;\n this.chainId = chainId;\n }\n\n async fetch(queryParameters?: string): Promise {\n if (!this.ctx.cache.useCache || !this.ctx.cache.url) {\n return undefined;\n }\n\n const cached = this.currentValue;\n if (cached) {\n return cached;\n }\n\n let path = `${this.ctx.cache.url}/v1/chains/${this.chainId}/${this.path}`;\n if (queryParameters) {\n path += `?${queryParameters}`;\n }\n\n let call: Response;\n try {\n const timeout = 5000;\n call = await this.fetchWithTimeout(path, timeout);\n } catch {\n console.warn(`Call to cache at ${path} timed out`);\n return undefined;\n }\n if (call.status !== 200) {\n const { url, status, statusText } = call;\n console.warn(`Call to cache failed at ${url} (status ${status} ${statusText})`);\n return undefined;\n }\n\n const json = await call.json();\n if (!json) {\n return undefined;\n }\n\n const maxAgeMatches = call.headers.get(\"cache-control\")?.match(/max-age=(\\d+)/);\n const maxAge = maxAgeMatches ? parseInt(maxAgeMatches[1], 10) : 30;\n const now = new Date().getTime();\n this.expiryDate = new Date(now + maxAge * 1000);\n this.cachedValue = json;\n\n return json as T;\n }\n\n private async fetchWithTimeout(url: string, timeout: number): Promise {\n return Promise.race([\n fetch(url),\n new Promise((_, reject) => setTimeout(() => reject(\"timeout\"), timeout))\n ]);\n }\n\n private get currentValue(): T | undefined {\n if (!this.expiryDate) {\n return undefined;\n }\n\n const now = new Date();\n if (now < this.expiryDate && this.cachedValue) {\n return this.cachedValue;\n }\n\n return undefined;\n }\n}\n","import { Contract, ContractInterface } from \"@ethersproject/contracts\";\nimport Emittery from \"emittery\";\n\nimport { ChainId } from \"./chain\";\nimport { Context, ReadWriteProvider } from \"./context\";\nimport { Address } from \"./types\";\nimport { Yearn } from \"./yearn\";\n\nexport class Service {\n ctx: Context;\n chainId: ChainId;\n\n events: Emittery;\n\n constructor(chainId: ChainId, ctx: Context) {\n this.chainId = chainId;\n this.ctx = ctx;\n\n this.events = new Emittery();\n }\n}\n\nexport class ServiceInterface extends Service {\n protected yearn: Yearn;\n\n constructor(yearn: Yearn, chainId: T, ctx: Context) {\n super(chainId, ctx);\n this.yearn = yearn;\n }\n}\n\n/**\n * Contract that supports two different providers to differentiate read and\n * write operations.\n */\nexport class WrappedContract {\n address: Address;\n abi: ContractInterface;\n\n read: Contract;\n write: Contract;\n\n constructor(address: Address, abi: ContractInterface, ctx: Context) {\n this.address = address;\n this.abi = abi;\n\n this.read = new Contract(address, abi, ctx.provider.read);\n this.write = new Contract(address, abi, ctx.provider.write);\n ctx.events.on(Context.PROVIDER, (provider: ReadWriteProvider) => {\n this.read = new Contract(this.address, this.abi, provider.read);\n this.write = new Contract(this.address, this.abi, provider.write);\n });\n }\n}\n\n/**\n * A service that has a contract representation on chain.\n */\nexport class ContractService extends Service {\n static abi: string[] = [];\n\n address: string;\n\n contract: WrappedContract;\n\n constructor(address: Address, chainId: T, ctx: Context) {\n super(chainId, ctx);\n this.address = address;\n\n this.contract = new WrappedContract(\n this.address,\n // @ts-ignore\n this.constructor.abi,\n ctx\n );\n }\n}\n","const YVBOOST = \"0x9d409a0a012cfba9b15f6d4b36ac57a46966ab9a\";\nconst YVECRV = \"0xc5bddf9843308380375a611c18b50fb9341f502a\";\nconst PSLPYVBOOSTETH = \"0xced67a187b923f0e5ebcc77c7f2f7da20099e378\";\n\nconst LAB_ADDRESSESS = [YVBOOST, YVECRV, PSLPYVBOOSTETH];\n\nexport const VAULT_EARNINGS = `query VaultEarnings($vault: ID!) {\n vault(id: $vault) {\n token {\n id\n decimals\n }\n latestUpdate {\n returnsGenerated\n }\n }\n }\n`;\n\nexport const PROTOCOL_EARNINGS = `query ProtocolEarnings {\n vaults {\n token {\n id\n decimals\n }\n latestUpdate {\n returnsGenerated\n }\n }\n }\n`;\n\nexport const buildAccountEarningsVariables = (id: string) => ({\n id,\n ignoredVaults: LAB_ADDRESSESS\n});\n\nexport const ACCOUNT_EARNINGS = `\n query AccountEarnings($id: ID!, $ignoredVaults: [String!]) {\n account(id: $id) {\n vaultPositions(where: { vault_not_in: $ignoredVaults } ) {\n balanceShares\n token {\n id\n decimals\n }\n shareToken {\n symbol\n }\n updates {\n deposits\n withdrawals\n tokensReceived\n tokensSent\n }\n vault {\n id\n latestUpdate {\n pricePerShare\n }\n }\n }\n }\n }\n`;\n\nexport const ASSET_HISTORIC_EARNINGS = (blocks: number[]) => {\n const makeBlockQuery = (block: number) => {\n return `\n block_${block}: vault(id: $id, block: { number: ${block} } ) {\n vaultDayData(orderBy: timestamp, orderDirection: desc, first: 1) {\n timestamp\n }\n strategies {\n latestReport {\n totalGain\n totalLoss\n }\n }\n }\n `;\n };\n\n const historicQueries = blocks.map(block => makeBlockQuery(block));\n\n const result = `query AssetHistoricEarnings($id: ID!) {\n vault(id: $id) {\n token {\n id\n decimals\n }\n }\n ${historicQueries.join(\"\")}\n }\n `;\n\n return result;\n};\n\nexport const ACCOUNT_HISTORIC_EARNINGS = `query AccountHistoricEarnings($id: ID!, $shareToken: String!, $fromDate: String!, $toDate: BigInt!) {\n account(id: $id) {\n vaultPositions(where: { shareToken: $shareToken }) {\n balanceShares\n token {\n id\n decimals\n }\n vault {\n vaultDayData(where: { timestamp_gte: $fromDate, timestamp_lte: $toDate }, orderBy: timestamp, orderDirection: asc, first: 1000) {\n pricePerShare\n timestamp\n }\n }\n updates(orderBy: timestamp, orderDirection: asc, first: 1000) {\n balanceShares\n timestamp\n deposits\n withdrawals\n tokensReceived\n tokensSent\n }\n }\n }\n }\n`;\n\nexport const PROTOCOL_FEES = `query ProtocolFees($sinceDate: BigInt!) {\n transfers(where: { timestamp_gt: $sinceDate }, first: 1000) {\n tokenAmountUsdc\n }\n }\n`;\n","import { getAddress } from \"@ethersproject/address\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport { CachedFetcher } from \"../cache\";\nimport { ChainId } from \"../chain\";\nimport { ServiceInterface } from \"../common\";\nimport {\n ACCOUNT_EARNINGS,\n ACCOUNT_HISTORIC_EARNINGS,\n ASSET_HISTORIC_EARNINGS,\n buildAccountEarningsVariables,\n PROTOCOL_EARNINGS,\n VAULT_EARNINGS\n} from \"../services/subgraph/queries\";\nimport {\n AccountEarningsResponse,\n AccountHistoricEarningsResponse,\n ProtocolEarningsResponse,\n VaultEarningsResponse\n} from \"../services/subgraph/responses\";\nimport { Address, SdkError } from \"../types\";\nimport {\n AccountHistoricEarnings,\n AssetEarnings,\n AssetHistoricEarnings,\n EarningsDayData,\n EarningsUserData\n} from \"../types/custom/earnings\";\n\nconst BigZero = new BigNumber(0);\n\nexport class EarningsInterface extends ServiceInterface {\n /**\n * @deprecated\n * Not able to be accurately calculated by the subgraph, this functionality will be removed in a future version\n */\n async protocolEarnings(): Promise {\n const response = await this.yearn.services.subgraph.fetchQuery(PROTOCOL_EARNINGS);\n\n let result = BigZero;\n\n if (!response?.data || !response.data?.vaults) {\n return result.toFixed(0);\n }\n\n for (const vault of response.data.vaults) {\n if (!vault.latestUpdate) {\n continue;\n }\n const returnsGenerated = new BigNumber(vault.latestUpdate.returnsGenerated);\n const earningsUsdc = await this.tokensValueInUsdc(returnsGenerated, vault.token.id, vault.token.decimals);\n result = result.plus(earningsUsdc);\n }\n\n return result.toFixed(0);\n }\n\n async assetEarnings(assetAddress: Address): Promise {\n const response = await this.yearn.services.subgraph.fetchQuery(VAULT_EARNINGS, {\n vault: assetAddress\n });\n\n if (!response?.data || !response.data?.vault) {\n throw new SdkError(`No asset with address ${assetAddress}`);\n }\n\n const { vault } = response.data;\n\n const returnsGenerated = new BigNumber(vault.latestUpdate?.returnsGenerated || 0);\n const earningsUsdc = await this.tokensValueInUsdc(returnsGenerated, vault.token.id, vault.token.decimals);\n return {\n assetAddress: getAddress(assetAddress), // addresses from subgraph are not checksummed\n amount: returnsGenerated.toFixed(0),\n amountUsdc: earningsUsdc.toFixed(0),\n tokenAddress: getAddress(vault.token.id)\n };\n }\n\n async accountAssetsData(accountAddress: Address): Promise {\n const response = await this.yearn.services.subgraph.fetchQuery(\n ACCOUNT_EARNINGS,\n buildAccountEarningsVariables(accountAddress)\n );\n\n const account = response?.data?.account;\n\n if (!account) {\n return { earnings: \"0\", holdings: \"0\", earningsAssetData: [], grossApy: 0, estimatedYearlyYield: \"0\" };\n }\n\n const assetsData = await Promise.all(\n account.vaultPositions.map(async assetPosition => {\n const balanceTokens = new BigNumber(assetPosition.balanceShares)\n .multipliedBy(new BigNumber(assetPosition.vault.latestUpdate?.pricePerShare || 0))\n .div(10 ** assetPosition.token.decimals);\n\n const { deposits, withdrawals, tokensReceived, tokensSent } = assetPosition.updates.reduce(\n ({ deposits, withdrawals, tokensReceived, tokensSent }, current) => ({\n deposits: deposits.plus(new BigNumber(current.deposits)),\n withdrawals: withdrawals.plus(new BigNumber(current.withdrawals)),\n tokensReceived: tokensReceived.plus(new BigNumber(current.tokensReceived)),\n tokensSent: tokensSent.plus(new BigNumber(current.tokensSent))\n }),\n {\n deposits: BigZero,\n withdrawals: BigZero,\n tokensReceived: BigZero,\n tokensSent: BigZero\n }\n );\n\n const positiveTokens = balanceTokens.plus(withdrawals).plus(tokensSent);\n const negativeTokens = deposits.plus(tokensReceived);\n const earningsTokens = positiveTokens.minus(negativeTokens);\n\n const earningsUsdc = await this.tokensValueInUsdc(\n earningsTokens,\n assetPosition.token.id,\n assetPosition.token.decimals\n );\n\n const balanceUsdc = await this.tokensValueInUsdc(\n balanceTokens,\n assetPosition.token.id,\n assetPosition.token.decimals\n );\n\n return {\n assetAddress: getAddress(assetPosition.vault.id),\n balanceUsdc,\n earned: earningsUsdc.toFixed(0)\n };\n })\n );\n\n const assetAddresses = assetsData.map(assetData => assetData.assetAddress);\n const apys = await this.yearn.services.vision.apy(assetAddresses);\n\n const totalEarnings = assetsData.map(datum => new BigNumber(datum.earned)).reduce((sum, value) => sum.plus(value));\n const holdings = assetsData.map(datum => new BigNumber(datum.balanceUsdc)).reduce((sum, value) => sum.plus(value));\n\n const grossApy = holdings.isEqualTo(BigZero)\n ? BigZero\n : assetsData\n .map(datum => {\n const apy = apys[datum.assetAddress]?.net_apy || 0;\n return new BigNumber(apy).times(datum.balanceUsdc).div(holdings);\n })\n .reduce((sum, value) => sum.plus(value));\n\n const estimatedYearlyYield = grossApy.multipliedBy(holdings);\n\n const earningsAssetData = assetsData.map(datum => {\n return {\n assetAddress: datum.assetAddress,\n earned: datum.earned\n };\n });\n\n return {\n earnings: BigNumber.max(totalEarnings, 0).toFixed(0),\n holdings: BigNumber.max(holdings, 0).toFixed(0),\n grossApy: grossApy.toNumber(),\n estimatedYearlyYield: BigNumber.max(estimatedYearlyYield, 0).toFixed(0),\n earningsAssetData: earningsAssetData\n };\n }\n\n private assetHistoricEarningsCache = new CachedFetcher(\n \"vaults/earnings/get\",\n this.ctx,\n this.chainId\n );\n\n async assetsHistoricEarnings(fromDaysAgo: number = 30): Promise {\n if (fromDaysAgo === 30) {\n const cached = await this.assetHistoricEarningsCache.fetch();\n if (cached) {\n return cached;\n }\n }\n\n const assetsStatic = await this.yearn.services.lens.adapters.vaults.v2.assetsStatic();\n const assetAddresses = assetsStatic.map(asset => asset.address);\n\n const latestBlockNumber = await this.ctx.provider.read.getBlockNumber();\n\n const resolvedPromises = await Promise.allSettled(\n assetAddresses.map(async address => this.assetHistoricEarnings(address, fromDaysAgo, latestBlockNumber))\n );\n\n let result = [];\n\n for (const resolvedPromise of resolvedPromises) {\n if (resolvedPromise.status === \"fulfilled\") {\n result.push(resolvedPromise.value);\n }\n }\n\n return result;\n }\n\n async assetHistoricEarnings(\n vault: Address,\n fromDaysAgo: number,\n latestBlockNumber?: number\n ): Promise {\n interface StrategiesResponse {\n latestReport?: {\n totalGain: string;\n totalLoss: string;\n };\n }\n\n let blockNumber: number;\n if (latestBlockNumber) {\n blockNumber = latestBlockNumber;\n } else {\n blockNumber = await this.ctx.provider.read.getBlockNumber();\n }\n\n blockNumber -= this.blockOffset(); // subgraph might be slightly behind latest block\n\n const blocks = Array.from(Array(fromDaysAgo).keys())\n .reverse()\n .map(day => blockNumber - day * this.blocksPerDay());\n\n const response = await this.yearn.services.subgraph.fetchQuery(ASSET_HISTORIC_EARNINGS(blocks), {\n id: vault\n });\n\n const data = response.data;\n\n const labels = blocks.map(block => `block_${block}`);\n\n const token = data.vault.token.id as string;\n const priceUsdc = await this.yearn.services.oracle.getPriceUsdc(token).then(price => new BigNumber(price));\n\n const earningsDayData = labels.map(label => {\n const strategies: StrategiesResponse[] = data[label].strategies;\n const totalGain = strategies\n .map(strategy => (strategy.latestReport ? new BigNumber(strategy.latestReport.totalGain) : new BigNumber(0)))\n .reduce((sum, value) => sum.plus(value));\n\n const totalLoss = strategies\n .map(strategy => (strategy.latestReport ? new BigNumber(strategy.latestReport.totalLoss) : new BigNumber(0)))\n .reduce((sum, value) => sum.plus(value));\n\n const amountEarnt = totalGain.minus(totalLoss);\n\n const amountUsdc = priceUsdc\n .multipliedBy(amountEarnt)\n .dividedBy(new BigNumber(10).pow(new BigNumber(data.vault.token.decimals)));\n\n const dayData: EarningsDayData = {\n earnings: {\n amountUsdc: amountUsdc.toFixed(0),\n amount: amountEarnt.toFixed(0)\n },\n date: new Date(+data[label].vaultDayData[0].timestamp).toJSON()\n };\n\n return dayData;\n });\n\n const result: AssetHistoricEarnings = {\n assetAddress: vault,\n dayData: earningsDayData,\n decimals: data.vault.token.decimals\n };\n\n return result;\n }\n\n async accountHistoricEarnings(\n accountAddress: Address,\n shareTokenAddress: Address,\n fromDaysAgo: number,\n toDaysAgo?: number\n ): Promise {\n if (toDaysAgo && toDaysAgo > fromDaysAgo) {\n throw new SdkError(\"fromDaysAgo must be greater than toDaysAgo\");\n }\n\n const response = await this.yearn.services.subgraph.fetchQuery(\n ACCOUNT_HISTORIC_EARNINGS,\n {\n id: accountAddress,\n shareToken: shareTokenAddress,\n fromDate: this.getDate(fromDaysAgo)\n .getTime()\n .toString(),\n toDate: this.getDate(toDaysAgo || 0)\n .getTime()\n .toString()\n }\n );\n\n const vaultPositions = response.data.account?.vaultPositions;\n\n if (!vaultPositions) {\n throw new SdkError(`No account with address ${accountAddress}`);\n }\n\n interface AccountSnapshot {\n startDate: Date;\n endDate: Date;\n deposits: BigNumber;\n withdrawals: BigNumber;\n tokensReceived: BigNumber;\n tokensSent: BigNumber;\n balanceShares: BigNumber;\n }\n\n let snapshotTimeline: AccountSnapshot[] = [];\n\n const updates = vaultPositions\n .flatMap(vaultPosition => vaultPosition.updates)\n .sort((lhs, rhs) => {\n return +lhs.timestamp - +rhs.timestamp;\n });\n\n for (const [index, vaultPositionUpdate] of updates.entries()) {\n if (index === 0) {\n const snapshot: AccountSnapshot = {\n startDate: new Date(0),\n endDate: new Date(+vaultPositionUpdate.timestamp),\n deposits: new BigNumber(vaultPositionUpdate.deposits),\n withdrawals: new BigNumber(vaultPositionUpdate.withdrawals),\n tokensReceived: new BigNumber(vaultPositionUpdate.tokensReceived),\n tokensSent: new BigNumber(vaultPositionUpdate.tokensSent),\n balanceShares: new BigNumber(vaultPositionUpdate.balanceShares)\n };\n snapshotTimeline.push(snapshot);\n } else {\n const previousSnapshot = snapshotTimeline[index - 1];\n const snapshot: AccountSnapshot = {\n startDate: previousSnapshot.endDate,\n endDate: new Date(+vaultPositionUpdate.timestamp),\n deposits: previousSnapshot.deposits.plus(new BigNumber(vaultPositionUpdate.deposits)),\n withdrawals: previousSnapshot.withdrawals.plus(new BigNumber(vaultPositionUpdate.withdrawals)),\n tokensReceived: previousSnapshot.tokensReceived.plus(new BigNumber(vaultPositionUpdate.tokensReceived)),\n tokensSent: previousSnapshot.tokensSent.plus(new BigNumber(vaultPositionUpdate.tokensSent)),\n balanceShares: previousSnapshot.balanceShares.plus(new BigNumber(vaultPositionUpdate.balanceShares))\n };\n snapshotTimeline.push(snapshot);\n }\n }\n\n if (snapshotTimeline.length > 0) {\n const lastSnapshot = snapshotTimeline[snapshotTimeline.length - 1];\n const distantFuture = new Date().setFullYear(3000);\n const snapshot: AccountSnapshot = {\n startDate: lastSnapshot.endDate,\n endDate: new Date(distantFuture),\n deposits: lastSnapshot.deposits,\n withdrawals: lastSnapshot.withdrawals,\n tokensReceived: lastSnapshot.tokensReceived,\n tokensSent: lastSnapshot.tokensSent,\n balanceShares: lastSnapshot.balanceShares\n };\n snapshotTimeline.push(snapshot);\n }\n\n const vaultDayData = vaultPositions[0].vault.vaultDayData;\n const token = vaultPositions[0].token;\n const usdcPrice = await this.yearn.services.oracle.getPriceUsdc(token.id).then(id => new BigNumber(id));\n\n const earningsDayData = await Promise.all(\n vaultDayData.map(async vaultDayDatum => {\n const date = new Date(+vaultDayDatum.timestamp);\n const snapshot = snapshotTimeline.find(snapshot => date >= snapshot.startDate && date < snapshot.endDate);\n if (snapshot) {\n const balanceTokens = snapshot.balanceShares\n .multipliedBy(new BigNumber(vaultDayDatum.pricePerShare))\n .dividedBy(new BigNumber(10 ** token.decimals));\n let positives = balanceTokens.plus(snapshot.withdrawals).plus(snapshot.tokensSent);\n let negatives = snapshot.deposits.plus(snapshot.tokensReceived);\n let earnings = positives.minus(negatives);\n\n const amountUsdc = usdcPrice.multipliedBy(earnings).dividedBy(new BigNumber(10).pow(token.decimals));\n\n return {\n earnings: {\n amount: earnings.toFixed(0),\n amountUsdc: amountUsdc.toFixed(0)\n },\n date: date.toJSON()\n };\n } else {\n return {\n earnings: {\n amount: \"0\",\n amountUsdc: \"0\"\n },\n date: date.toJSON()\n };\n }\n })\n );\n\n return {\n accountAddress: accountAddress,\n shareTokenAddress: shareTokenAddress,\n decimals: token.decimals,\n dayData: earningsDayData\n };\n }\n\n private async tokensValueInUsdc(tokenAmount: BigNumber, tokenAddress: Address, decimals: number): Promise {\n const tokenUsdcPrice = await this.yearn.services.oracle.getPriceUsdc(tokenAddress);\n return new BigNumber(tokenUsdcPrice).multipliedBy(tokenAmount).div(10 ** decimals);\n }\n\n private getDate(daysAgo: number) {\n let date = new Date();\n date.setDate(date.getDate() - daysAgo);\n return date;\n }\n\n private blocksPerDay(): number {\n switch (this.chainId) {\n case 1:\n case 1337:\n case 42161:\n return 5760;\n case 250:\n return 86400;\n }\n }\n\n private blockOffset(): number {\n switch (this.chainId) {\n case 1:\n case 1337:\n case 42161:\n return 100;\n case 250:\n return 1000;\n }\n }\n}\n","import BigNumber from \"bignumber.js\";\n\nimport { ChainId } from \"../chain\";\nimport { ServiceInterface } from \"../common\";\nimport { PROTOCOL_FEES } from \"../services/subgraph/queries\";\nimport { FeesResponse } from \"../services/subgraph/responses\";\nimport { Usdc } from \"../types\";\n\nexport class FeesInterface extends ServiceInterface {\n async protocolFees(since: Date): Promise {\n const response = await this.yearn.services.subgraph.fetchQuery(PROTOCOL_FEES, {\n sinceDate: since.getTime().toString()\n });\n\n const transfers = response.data.transfers;\n\n return transfers\n .reduce((prev, current) => {\n return prev.plus(new BigNumber(current.tokenAmountUsdc || 0));\n }, new BigNumber(0))\n .toFixed(0);\n }\n}\n","import { CallOverrides } from \"@ethersproject/contracts\";\n\nimport { CachedFetcher } from \"../cache\";\nimport { ChainId } from \"../chain\";\nimport { ServiceInterface } from \"../common\";\nimport {\n Address,\n Balance,\n CyTokenUserMetadata,\n IronBankMarket,\n IronBankMarketDynamic,\n IronBankMarketStatic,\n IronBankUserSummary,\n Position,\n SdkError,\n Token\n} from \"../types\";\n\nexport class IronBankInterface extends ServiceInterface {\n private cachedFetcherGet = new CachedFetcher(\"ironbank/get\", this.ctx, this.chainId);\n private cachedFetcherGetDynamic = new CachedFetcher(\n \"ironbank/getDynamic\",\n this.ctx,\n this.chainId\n );\n private cachedFetcherTokens = new CachedFetcher(\"ironbank/tokens\", this.ctx, this.chainId);\n\n /**\n * Get all IronBank markets.\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async get(addresses?: Address[], overrides?: CallOverrides): Promise {\n const cached = await this.cachedFetcherGet.fetch();\n if (cached) {\n if (addresses) {\n return cached.filter(market => addresses.includes(market.address));\n } else {\n return cached;\n }\n }\n\n const assetsStatic = await this.yearn.services.lens.adapters.ironBank.assetsStatic(addresses, overrides);\n const assetsDynamic = await this.yearn.services.lens.adapters.ironBank.assetsDynamic(addresses, overrides);\n const assets = new Array();\n for (const asset of assetsStatic) {\n const dynamic = assetsDynamic.find(({ address }) => asset.address === address);\n if (!dynamic) {\n throw new SdkError(`Dynamic asset does not exist for ${asset.address}`);\n }\n assets.push({ ...asset, ...dynamic });\n }\n return assets;\n }\n\n /**\n * Get static part of IronBank markets.\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async getStatic(addresses?: Address[], overrides?: CallOverrides): Promise {\n return await this.yearn.services.lens.adapters.ironBank.assetsStatic(addresses, overrides);\n }\n\n /**\n * Get dynamic part of IronBank markets.\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async getDynamic(addresses?: Address[], overrides?: CallOverrides): Promise {\n const cached = await this.cachedFetcherGetDynamic.fetch();\n if (cached) {\n if (addresses) {\n return cached.filter(market => addresses.includes(market.address));\n } else {\n return cached;\n }\n }\n\n return await this.yearn.services.lens.adapters.ironBank.assetsDynamic(addresses, overrides);\n }\n\n /**\n * Get IronBank market positions for a particular address.\n * @param address\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async positionsOf(address: Address, addresses?: Address[], overrides?: CallOverrides): Promise {\n return this.yearn.services.lens.adapters.ironBank.positionsOf(address, addresses, overrides);\n }\n\n /**\n * Get the IronBank User Summary for a particular address.\n * @param address\n * @param overrides\n * @returns\n */\n async summaryOf(address: Address, overrides?: CallOverrides): Promise {\n return this.yearn.services.lens.adapters.ironBank.generalPositionOf(address, overrides);\n }\n\n /**\n * Get the IronBank User Metadata for a particular address.\n * @param address\n * @param addresses\n * @param overrides\n * @returns\n */\n async metadataOf(address: Address, addresses?: Address[], overrides?: CallOverrides): Promise {\n return this.yearn.services.lens.adapters.ironBank.assetsUserMetadata(address, addresses, overrides);\n }\n\n /**\n * Get all IronBank market's underlying token balances for a particular\n * address.\n * @param address\n * @param overrides\n * @returns\n */\n async balances(address: Address, overrides?: CallOverrides): Promise {\n const tokens = await this.tokens();\n const balances = await this.yearn.services.helper.tokenBalances(\n address,\n tokens.map(token => token.address),\n overrides\n );\n return balances.map(balance => {\n const token = tokens.find(token => token.address === balance.address);\n if (!token) {\n throw new SdkError(`Token does not exist for Balance(${balance.address})`);\n }\n return {\n ...balance,\n token\n };\n });\n }\n\n /**\n * Get all IronBank market's underlying tokens.\n * @param overrides\n * @returns\n */\n async tokens(overrides?: CallOverrides): Promise {\n const cached = await this.cachedFetcherTokens.fetch();\n if (cached) {\n return cached;\n }\n\n const tokenAddresses = await this.yearn.services.lens.adapters.ironBank.tokens(overrides);\n const tokens = await this.yearn.services.helper.tokens(tokenAddresses, overrides);\n const icons = this.yearn.services.asset.icon(tokenAddresses);\n return Promise.all(\n tokens.map(async token => ({\n ...token,\n icon: icons[token.address],\n supported: {},\n priceUsdc: await this.yearn.services.oracle.getPriceUsdc(token.address, overrides)\n }))\n );\n }\n}\n","import { BigNumber } from \"@ethersproject/bignumber\";\n\nimport { Integer, SdkError, Usdc } from \"./types\";\n\nexport const ZeroAddress = \"0x0000000000000000000000000000000000000000\";\nexport const EthAddress = \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\";\nexport const WethAddress = \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\";\n\n// handle a non-200 `fetch` response.\nexport async function handleHttpError(response: Response): Promise {\n if (response.status !== 200) {\n const { url, status, statusText } = response;\n throw new SdkError(`HTTP to ${url} request failed (status ${status} ${statusText})`);\n }\n return response;\n}\n\n// formally convert USD values to USDC values (* 1e6), using Usdc type alias.\nexport function usdc(usd: any): Usdc {\n return BigNumber.from(Math.floor(Number(usd) * 1e6)).toString();\n}\n\n// formally convert BigNumber to Integer type alias.\nexport function int(value: BigNumber): Integer {\n return value.toString();\n}\n\nexport function chunkArray(array: T[], size: number) {\n if (size < 1) {\n throw new Error(`Size needs to be positive: ${size}`);\n }\n\n let result = [];\n for (let i = 0; i < array.length; i += size) {\n let chunk = array.slice(i, i + size);\n result.push(chunk);\n }\n return result;\n}\n","import { getAddress } from \"@ethersproject/address\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport { Service } from \"../../common\";\nimport { usdc } from \"../../helpers\";\nimport { Address, Usdc } from \"../../types/common\";\n\nconst HourInMilliseconds = 1000 * 60 * 60;\nconst PickleApiUrl = \"https://api.pickle.finance/prod/protocol/pools\";\nconst PickleApiBackupUrl = \"https://f8wgg18t1h.execute-api.us-west-1.amazonaws.com/prod/protocol/pools\";\n\nexport const PickleJars = [\n \"0xCeD67a187b923F0E5ebcc77C7f2F7da20099e378\" // yvboost-eth\n];\n\nexport class PickleService extends Service {\n private pickleJarUSDPrices: Map = new Map();\n private lastFetchedDate: Date = new Date(0);\n\n /**\n * Fetches the USD price of a pickle jar token\n * @param jar the address of the jar to fetch\n * @returns the price of the jar token in USD\n */\n async getPriceUsdc(jar: Address): Promise {\n const oneHourAgo = new Date(Date.now() - HourInMilliseconds);\n if (this.lastFetchedDate < oneHourAgo) {\n await this.fetchPickleJarPrices();\n }\n return usdc(this.pickleJarUSDPrices.get(jar)?.toFixed(0)) || \"0\";\n }\n\n private async fetchPickleJarPrices() {\n interface JarDatum {\n liquidity_locked: number;\n jarAddress: Address;\n tokens: number;\n }\n\n const jarData: JarDatum[] = await fetch(PickleApiUrl)\n .catch(() => {\n return fetch(PickleApiBackupUrl);\n })\n .then(res => res.json());\n\n this.pickleJarUSDPrices.clear();\n this.lastFetchedDate = new Date();\n\n const relevantJars = jarData.filter(jar => PickleJars.includes(getAddress(jar.jarAddress)));\n\n for (const jarDatum of relevantJars) {\n const usdPrice = new BigNumber(jarDatum.liquidity_locked / jarDatum.tokens);\n this.pickleJarUSDPrices.set(getAddress(jarDatum.jarAddress), usdPrice);\n }\n }\n}\n","import { getAddress } from \"@ethersproject/address\";\nimport { JsonRpcProvider, JsonRpcSigner, TransactionRequest } from \"@ethersproject/providers\";\nimport BigNumber from \"bignumber.js\";\n\nimport { Context } from \"./context\";\nimport { TelegramService } from \"./services/telegram\";\nimport { EthersError, SimulationError, SimulationOptions, TenderlyError } from \"./types\";\nimport { Address, Integer } from \"./types/common\";\n\nconst baseUrl = \"https://simulate.yearn.network\";\nconst latestBlockKey = -1;\n\nexport interface SimulationResponse {\n transaction: {\n transaction_info: {\n call_trace: SimulationCallTrace;\n logs: SimulationLog[];\n };\n error_message?: string;\n };\n simulation: {\n id: string;\n };\n}\n\ninterface SimulationLog {\n raw: {\n address: Address;\n topics: string[];\n data: string;\n };\n}\n\ninterface SimulationCallTrace {\n output: Integer;\n calls: SimulationCallTrace[] | null;\n error?: string;\n}\n\n/**\n * [[SimulationExecutor]] performs simulation requests and returns the response\n * with no data manipulation. If the simulation results in an error then an alert is sent\n * via telegram if the appropriate environment variables are set. Forks are necessary to be\n * created if two subsequent simulations are needed e.g. if a zap in is wished to be simulated\n * but the user has not approved the zap contract then the steps to simulate it are:\n * 1. Create a fork\n * 2. Simulate the approval transaction using this fork\n * 3. Simulate the zap in using the approval transaction as the root\n */\nexport class SimulationExecutor {\n constructor(private telegram: TelegramService, private ctx: Context) {}\n\n /**\n * Simulate a transaction\n * @param from\n * @param to\n * @param input the encoded input data as per the ethereum abi specification\n * @param value the ether value of the transaction\n * @param options simulation options\n * @returns data about the simulated transaction\n */\n async simulateRaw(\n from: Address,\n to: Address,\n input: string,\n options: SimulationOptions = {},\n value: Integer = \"0\"\n ): Promise {\n return await this.makeSimulationRequest(from, to, input, options, value);\n }\n\n /**\n * Simulates an interaction with a vault to see how much of the desired token\n * will be received. This happens by inspecting the logs of the transaction and\n * finding the Transfer event where the desired token is transferred to the user.\n * @param from\n * @param to\n * @param data\n * @param targetToken the token being bought by this transaction\n * @param from the address initiating this transaction\n * @param options\n * @param value\n * @returns the amount of tokens simulated to be bought\n */\n async simulateVaultInteraction(\n from: Address,\n to: Address,\n data: string,\n targetToken: Address,\n options: SimulationOptions,\n value: Integer = \"0\"\n ): Promise {\n let response: SimulationResponse = await this.makeSimulationRequest(from, to, data, options, value);\n\n const getAddressFromTopic = (topic: string) => {\n return getAddress(topic.slice(-40)); // the last 20 bytes of the topic is the address\n };\n\n const encodedTransferFunction = \"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\"; // keccak256(\"Transfer(address,address,uint256)\")\n\n const log = response.transaction.transaction_info.logs\n .reverse()\n .find(\n log =>\n log.raw.topics[0] === encodedTransferFunction && getAddressFromTopic(log.raw.topics[2]) === getAddress(from)\n );\n\n if (!log) {\n throw new SimulationError(`No log of transferring token ${targetToken} to ${from}`, SimulationError.NO_LOG);\n }\n\n const tokensReceived = new BigNumber(log.raw.data).toFixed(0);\n return tokensReceived;\n }\n\n /**\n * Performs a simulation with preset parameters\n * @param from\n * @param to\n * @param data\n * @param options\n * @param value\n * @returns the resulting data from the transaction\n */\n async makeSimulationRequest(\n from: Address,\n to: Address,\n data: string,\n options: SimulationOptions,\n value: Integer = \"0\"\n ): Promise {\n const constructedPath = options?.forkId ? `${baseUrl}/fork/${options.forkId}/simulate` : `${baseUrl}/simulate`;\n\n const transactionRequest = await this.getPopulatedTransactionRequest(from, to, data, options, value);\n\n const body = {\n from,\n to,\n input: data,\n network_id: transactionRequest.chainId?.toString() || \"1\",\n block_number: latestBlockKey,\n simulation_type: \"quick\",\n root: options?.root,\n value: transactionRequest.value?.toString() || \"0\",\n gas: parseInt(transactionRequest.gasLimit?.toString() || \"0\"),\n gas_price: transactionRequest.gasPrice?.toString() || 0,\n save: options.save || true,\n nonce: transactionRequest.nonce\n };\n\n const simulationResponse = await fetch(constructedPath, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(body)\n })\n .then(res => res.json())\n .catch(() => {\n throw new TenderlyError(\"simulation call to Tenderly failed\", TenderlyError.SIMULATION_CALL);\n });\n\n const errorMessage = simulationResponse.transaction.error_message;\n\n if (errorMessage) {\n if (options.save) {\n this.sendErrorMessage(errorMessage, simulationResponse.simulation.id, options.forkId);\n }\n throw new SimulationError(errorMessage, SimulationError.TENDERLY_RESPONSE_ERROR);\n } else {\n // even though the transaction has been successful one of it's calls could have failed i.e. a partial revert might have happened\n const allCalls = this.getAllSimulationCalls(simulationResponse.transaction.transaction_info.call_trace);\n const partialRevertError = allCalls.find(call => call.error)?.error;\n if (partialRevertError) {\n const errorMessage = \"Partial Revert - \" + partialRevertError;\n this.sendErrorMessage(errorMessage, simulationResponse.simulation.id, options?.forkId);\n throw new SimulationError(errorMessage, SimulationError.PARTIAL_REVERT);\n }\n }\n\n return simulationResponse;\n }\n\n /**\n * Simulates a transaction, with the `save` parameter initially set to `false`. If this simulation fails then\n * the simulation is re-executed but with `save` set to `true` so the failure can be stored and later analyzed.\n * @param simulate the function which executes the simulation, passing in `save` as an argument.\n * @param forkIdToDeleteOnSuccess if the simulation is successful there is no reason to save it. Delete the fork to avoid clutter\n * @returns the result of the simulate parameter\n */\n async executeSimulationWithReSimulationOnFailure(\n simulate: (save: boolean) => Promise,\n forkIdToDeleteOnSuccess: string | null = null\n ): Promise {\n try {\n const result = await simulate(false).then(res => {\n // if the transaction used a fork and was successful then delete it\n if (forkIdToDeleteOnSuccess) {\n this.deleteFork(forkIdToDeleteOnSuccess);\n }\n return res;\n });\n\n return result;\n } catch (error) {\n // re-simulate the transaction with `save` set to true so the failure can be analyzed later\n try {\n simulate(true);\n } catch {}\n\n throw error;\n }\n }\n\n /**\n * Recursively loops through the simulation call trace, aggregating all calls into a flattened array.\n * @param callTrace the starting call trace to inspect\n * @returns a flattened array of call data\n */\n private getAllSimulationCalls(callTrace: SimulationCallTrace): SimulationCallTrace[] {\n let result: SimulationCallTrace[] = [];\n result = result.concat(callTrace.calls || []);\n for (const calls of callTrace.calls || []) {\n const res = this.getAllSimulationCalls(calls);\n result = result.concat(res);\n }\n return result;\n }\n\n /**\n * Creates a transaction object and populates it to fill in parameters such as gas price,\n * gas limit and nonce for a more accurate simulations\n * @param from\n * @param to\n * @param data\n * @param value\n * @param options\n * @returns A populated TransactionRequest object\n */\n private async getPopulatedTransactionRequest(\n from: Address,\n to: Address,\n data: string,\n options: SimulationOptions,\n value: Integer = \"0\"\n ): Promise {\n let signer: JsonRpcSigner;\n if (options?.forkId) {\n const provider = new JsonRpcProvider(`https://rpc.tenderly.co/fork/${options.forkId}`);\n signer = provider.getSigner(from);\n } else {\n signer = this.ctx.provider.write.getSigner(from);\n }\n\n if (options.maxFeePerGas && options.maxPriorityFeePerGas) {\n delete options.gasPrice;\n }\n\n const transactionRequest: TransactionRequest = {\n from,\n to,\n data,\n value,\n gasLimit: options.gasLimit,\n gasPrice: options.gasPrice,\n maxFeePerGas: options.maxFeePerGas,\n maxPriorityFeePerGas: options.maxPriorityFeePerGas,\n type: options.gasPrice ? 0 : undefined\n };\n\n const result = await signer.populateTransaction(transactionRequest).catch(() => {\n throw new EthersError(\"error populating transaction\", EthersError.POPULATING_TRANSACTION);\n });\n\n return result;\n }\n\n /**\n * Create a new fork that can be used to simulate multiple sequential transactions on\n * e.g. approval followed by a deposit.\n * @returns the uuid of a new fork that has been created\n */\n async createFork(): Promise {\n interface Response {\n simulation_fork: {\n id: string;\n };\n }\n\n const body = {\n alias: \"\",\n description: \"\",\n network_id: \"1\"\n };\n\n const response: Response = await await fetch(`${baseUrl}/fork`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(body)\n })\n .then(res => res.json())\n .catch(() => {\n throw new TenderlyError(\"failed to create fork\", TenderlyError.CREATE_FORK);\n });\n\n return response.simulation_fork.id;\n }\n\n /**\n * Deletes a fork. This should be done after its successful use in order to avoid clutter.\n * @param forkId the fork to be deleted\n * @returns the deletion response\n */\n private async deleteFork(forkId: string) {\n return await fetch(`${baseUrl}/fork/${forkId}`, { method: \"DELETE\" });\n }\n\n /**\n * Sends a message to a telegram channel reporting a simulation error\n * @param errorMessage the error to be reported\n * @param simulationId the id of the simulation so the simulation failure can be inspected in the dashboard\n * @param forkId the optional id of the fork so the simulation failure can be inspected in the dashboard\n */\n private sendErrorMessage(errorMessage: string, simulationId: string, forkId?: string) {\n let transactionUrl: string | undefined;\n if (this.ctx.simulation.dashboardUrl) {\n transactionUrl = `${this.ctx.simulation.dashboardUrl}/${\n forkId ? `fork/${forkId}/simulation` : \"simulator\"\n }/${simulationId}`;\n }\n\n const message = [\"Simulation error\", errorMessage, transactionUrl].map(item => item).join(\"\\n\\n\");\n\n this.telegram.sendMessage(message);\n }\n}\n","import { Contract } from \"@ethersproject/contracts\";\nimport { JsonRpcSigner } from \"@ethersproject/providers\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport { Address } from \"./types/common\";\n\nexport abstract class VaultContract {\n protected static get abi() {\n return [\n \"function token() view returns (address)\",\n \"function decimals() view returns (uint256)\",\n \"function deposit(uint256 amount) public\",\n \"function withdraw(uint256 amount) public\"\n ];\n }\n\n constructor(protected contract: Contract) {}\n\n abstract pricePerShare(): Promise;\n\n async decimals(): Promise {\n const decimals = await this.contract.decimals();\n return new BigNumber(decimals.toString());\n }\n\n async token(): Promise
{\n return await this.contract.token();\n }\n\n encodeDeposit = (amount: string): string => {\n return this.contract.interface.encodeFunctionData(\"deposit\", [amount]);\n };\n\n encodeWithdraw = (amount: string): string => {\n return this.contract.interface.encodeFunctionData(\"withdraw\", [amount]);\n };\n}\n\nexport class PickleJarContract extends VaultContract {\n private static get pickleJarAbi() {\n return [\"function getRatio() public view returns (uint256)\"];\n }\n\n constructor(jarAddress: Address, signer: JsonRpcSigner) {\n super(new Contract(jarAddress, [...VaultContract.abi, ...PickleJarContract.pickleJarAbi], signer));\n }\n\n async pricePerShare(): Promise {\n const ratio = await this.contract.getRatio();\n return new BigNumber(ratio.toString());\n }\n}\n\nexport class YearnVaultContract extends VaultContract {\n private static get yearnVaultAbi() {\n return [\"function pricePerShare() view returns (uint256)\"];\n }\n\n constructor(jarAddress: Address, signer: JsonRpcSigner) {\n super(new Contract(jarAddress, [...VaultContract.abi, ...YearnVaultContract.yearnVaultAbi], signer));\n }\n\n async pricePerShare(): Promise {\n const pricePerShare = await this.contract.pricePerShare();\n return new BigNumber(pricePerShare.toString());\n }\n}\n","import { getAddress } from \"@ethersproject/address\";\nimport { Contract } from \"@ethersproject/contracts\";\nimport { JsonRpcSigner } from \"@ethersproject/providers\";\nimport BigNumber from \"bignumber.js\";\n\nimport { ChainId } from \"../chain\";\nimport { ServiceInterface } from \"../common\";\nimport { EthAddress, WethAddress, ZeroAddress } from \"../helpers\";\nimport { PickleJars } from \"../services/partners/pickle\";\nimport { SimulationExecutor, SimulationResponse } from \"../simulationExecutor\";\nimport {\n Address,\n EthersError,\n Integer,\n PriceFetchingError,\n SdkError,\n ZapApprovalTransactionOutput,\n ZapperError,\n ZapProtocol\n} from \"../types\";\nimport { SimulationOptions, TransactionOutcome } from \"../types/custom/simulation\";\nimport { PickleJarContract, VaultContract, YearnVaultContract } from \"../vault\";\n\n/**\n * [[SimulationInterface]] allows the simulation of ethereum transactions using Tenderly's api.\n * This allows us to know information before executing a transaction on mainnet.\n * For example it can simulate how much slippage is likely to be experienced when withdrawing from a vault,\n * or how many underlying tokens the user will receive upon withdrawing share tokens.\n */\nexport class SimulationInterface extends ServiceInterface {\n private simulationExecutor = new SimulationExecutor(this.yearn.services.telegram, this.ctx);\n\n async deposit(\n from: Address,\n sellToken: Address,\n amount: Integer,\n toVault: Address,\n options: SimulationOptions = {}\n ): Promise {\n const signer = this.ctx.provider.write.getSigner(from);\n const zapProtocol = PickleJars.includes(toVault) ? ZapProtocol.PICKLE : ZapProtocol.YEARN;\n let vaultContract =\n zapProtocol === ZapProtocol.PICKLE\n ? new PickleJarContract(toVault, signer)\n : new YearnVaultContract(toVault, signer);\n\n const underlyingToken = await vaultContract.token().catch(() => {\n throw new EthersError(\"failed to fetch token\", EthersError.FAIL_TOKEN_FETCH);\n });\n const isZapping = underlyingToken !== sellToken;\n let forkId: string | undefined;\n let simulateDeposit: (save: boolean) => Promise;\n\n if (isZapping) {\n if (!options.slippage) {\n throw new SdkError(\"slippage needs to be specified for a zap\", SdkError.NO_SLIPPAGE);\n }\n\n let needsApproving: boolean;\n\n if (sellToken === EthAddress) {\n needsApproving = false;\n } else {\n needsApproving = await this.yearn.services.zapper\n .zapInApprovalState(from, sellToken, zapProtocol)\n .then(state => !state.isApproved)\n .catch(() => {\n throw new ZapperError(\"approval state\", ZapperError.ZAP_IN_APPROVAL_STATE);\n });\n }\n\n forkId = needsApproving ? await this.simulationExecutor.createFork() : undefined;\n options.forkId = forkId;\n\n const approvalTransactionId = needsApproving\n ? await this.yearn.services.zapper\n .zapInApprovalTransaction(from, sellToken, \"0\", zapProtocol)\n .catch(() => {\n throw new ZapperError(\"approval\", ZapperError.ZAP_IN_APPROVAL);\n })\n .then(async approvalTransaction => {\n return await this.simulateZapApprovalTransaction(approvalTransaction, options);\n })\n .then(res => res.simulation.id)\n : undefined;\n options.root = approvalTransactionId;\n\n simulateDeposit = (save: boolean) => {\n options.save = save;\n return this.zapIn(\n from,\n sellToken,\n underlyingToken,\n amount,\n toVault,\n vaultContract,\n zapProtocol,\n needsApproving,\n options\n );\n };\n } else {\n const needsApproving = await this.depositNeedsApproving(from, sellToken, toVault, amount, signer);\n\n forkId = needsApproving ? await this.simulationExecutor.createFork() : undefined;\n options.forkId = forkId;\n\n const approvalTransactionId = needsApproving\n ? await this.approve(from, sellToken, amount, toVault, options)\n : undefined;\n options.root = approvalTransactionId;\n\n simulateDeposit = (save: boolean) => {\n options.save = save;\n return this.directDeposit(from, sellToken, amount, toVault, vaultContract, options);\n };\n }\n return this.simulationExecutor.executeSimulationWithReSimulationOnFailure(simulateDeposit, forkId);\n }\n\n async withdraw(\n from: Address,\n fromVault: Address,\n amount: Integer,\n toToken: Address,\n options: SimulationOptions = {}\n ): Promise {\n const signer = this.ctx.provider.write.getSigner(from);\n const vaultContract = new YearnVaultContract(fromVault, signer);\n const underlyingToken = await vaultContract.token();\n const isZapping = underlyingToken !== getAddress(toToken);\n let forkId: string | undefined;\n let simulateWithdrawal: (save: boolean) => Promise;\n\n if (isZapping) {\n if (!options.slippage) {\n throw new SdkError(\"slippage needs to be specified for a zap\", SdkError.NO_SLIPPAGE);\n }\n let needsApproving: boolean;\n\n if (fromVault === EthAddress) {\n needsApproving = false;\n } else {\n needsApproving = await this.yearn.services.zapper\n .zapOutApprovalState(from, fromVault)\n .then(state => !state.isApproved)\n .catch(() => {\n throw new ZapperError(\"zap out approval state\", ZapperError.ZAP_OUT_APPROVAL_STATE);\n });\n }\n\n forkId = needsApproving ? await this.simulationExecutor.createFork() : undefined;\n options.forkId = forkId;\n const approvalSimulationId = needsApproving\n ? await this.yearn.services.zapper\n .zapOutApprovalTransaction(from, fromVault, \"0\")\n .catch(() => {\n throw new ZapperError(\"zap out approval transaction\", ZapperError.ZAP_OUT_APPROVAL);\n })\n .then(async approvalTransaction => {\n return await this.simulateZapApprovalTransaction(approvalTransaction, options);\n })\n .then(res => res.simulation.id)\n : undefined;\n\n options.root = approvalSimulationId;\n\n simulateWithdrawal = (save: boolean) => {\n options.save = save;\n return this.zapOut(from, toToken, underlyingToken, amount, fromVault, needsApproving, options);\n };\n } else {\n simulateWithdrawal = (save: boolean) => {\n options.save = save;\n return this.directWithdraw(from, toToken, amount, fromVault, vaultContract, options);\n };\n }\n return this.simulationExecutor.executeSimulationWithReSimulationOnFailure(simulateWithdrawal, forkId);\n }\n\n private async approve(\n from: Address,\n token: Address,\n amount: Integer,\n vault: Address,\n options: SimulationOptions\n ): Promise {\n const TokenAbi = [\"function approve(address spender, uint256 amount) returns (bool)\"];\n const signer = this.ctx.provider.write.getSigner(from);\n const tokenContract = new Contract(token, TokenAbi, signer);\n const encodedInputData = tokenContract.interface.encodeFunctionData(\"approve\", [vault, amount]);\n options.save = true;\n\n const simulationResponse: SimulationResponse = await this.simulationExecutor.makeSimulationRequest(\n from,\n token,\n encodedInputData,\n options\n );\n\n return simulationResponse.simulation.id;\n }\n\n private async depositNeedsApproving(\n from: Address,\n token: Address,\n vault: Address,\n amount: Integer,\n signer: JsonRpcSigner\n ): Promise {\n const TokenAbi = [\"function allowance(address owner, address spender) view returns (uint256)\"];\n const contract = new Contract(token, TokenAbi, signer);\n const result = await contract.allowance(from, vault).catch(() => {\n \"deposit needs approving\";\n });\n return new BigNumber(result.toString()).lt(new BigNumber(amount));\n }\n\n private async directDeposit(\n from: Address,\n sellToken: Address,\n amount: Integer,\n toVault: Address,\n vaultContract: VaultContract,\n options: SimulationOptions\n ): Promise {\n const encodedInputData = vaultContract.encodeDeposit(amount);\n\n const tokensReceived = await this.simulationExecutor.simulateVaultInteraction(\n from,\n toVault,\n encodedInputData,\n toVault,\n options\n );\n\n const targetTokenAmountUsdc = await this.yearn.services.oracle\n .getNormalizedValueUsdc(toVault, tokensReceived)\n .catch(() => {\n throw new PriceFetchingError(\"Error fetching price\", PriceFetchingError.FETCHING_PRICE_ORACLE);\n });\n\n const [decimals, pricePerShare] = await Promise.all([\n vaultContract.decimals().catch(() => {\n throw new EthersError(\"no decimals\", EthersError.NO_DECIMALS);\n }),\n vaultContract.pricePerShare().catch(() => {\n throw new EthersError(\"no price per share\", EthersError.NO_PRICE_PER_SHARE);\n })\n ]);\n\n const targetUnderlyingTokensReceived = new BigNumber(tokensReceived)\n .div(new BigNumber(10).pow(decimals))\n .multipliedBy(pricePerShare)\n .toFixed(0);\n\n const result: TransactionOutcome = {\n sourceTokenAddress: sellToken,\n sourceTokenAmount: amount,\n targetTokenAddress: toVault,\n targetTokenAmount: tokensReceived,\n targetTokenAmountUsdc: targetTokenAmountUsdc,\n targetUnderlyingTokenAddress: toVault,\n targetUnderlyingTokenAmount: targetUnderlyingTokensReceived,\n conversionRate: 1,\n slippage: 0\n };\n\n return result;\n }\n\n private async zapIn(\n from: Address,\n sellToken: Address,\n underlyingTokenAddress: Address,\n amount: Integer,\n toVault: Address,\n vaultContract: VaultContract,\n zapProtocol: ZapProtocol,\n skipGasEstimate: boolean,\n options: SimulationOptions\n ): Promise {\n const zapToken = sellToken === EthAddress ? ZeroAddress : sellToken;\n\n if (!options.slippage) {\n throw new SdkError(\"slippage needs to be set\", SdkError.NO_SLIPPAGE);\n }\n\n const zapInParams = await this.yearn.services.zapper\n .zapIn(from, zapToken, amount, toVault, options.gasPrice || \"0\", options.slippage, skipGasEstimate, zapProtocol)\n .catch(() => {\n throw new ZapperError(\"zap in\", ZapperError.ZAP_IN);\n });\n\n const value = new BigNumber(zapInParams.value).toFixed(0);\n\n options.gasPrice = options.gasPrice || zapInParams.gasPrice;\n if (!skipGasEstimate) {\n options.gasLimit = zapInParams.gas;\n }\n\n const tokensReceived = await this.simulationExecutor.simulateVaultInteraction(\n from,\n zapInParams.to,\n zapInParams.data,\n toVault,\n options,\n value\n );\n\n const [decimals, pricePerShare] = await Promise.all([\n vaultContract.decimals().catch(() => {\n throw new EthersError(\"no decimals\", EthersError.NO_DECIMALS);\n }),\n vaultContract.pricePerShare().catch(() => {\n throw new EthersError(\"no price per share\", EthersError.NO_PRICE_PER_SHARE);\n })\n ]);\n const targetUnderlyingTokensReceived = new BigNumber(tokensReceived)\n .div(new BigNumber(10).pow(decimals))\n .multipliedBy(pricePerShare)\n .toFixed(0);\n\n let amountReceivedUsdc: BigNumber;\n\n switch (zapProtocol) {\n case ZapProtocol.YEARN:\n amountReceivedUsdc = await this.yearn.services.oracle\n .getNormalizedValueUsdc(toVault, tokensReceived)\n .then(price => new BigNumber(price))\n .catch(() => {\n throw new PriceFetchingError(\"error fetching price\", PriceFetchingError.FETCHING_PRICE_ORACLE);\n });\n break;\n case ZapProtocol.PICKLE:\n amountReceivedUsdc = (\n await this.yearn.services.pickle\n .getPriceUsdc(toVault)\n .catch(() => {\n throw new PriceFetchingError(\"error fetching price\", PriceFetchingError.FETCHING_PRICE_PICKLE);\n })\n .then(usdc => new BigNumber(usdc))\n )\n .dividedBy(new BigNumber(10).pow(decimals))\n .multipliedBy(new BigNumber(tokensReceived));\n break;\n }\n\n const oracleToken = sellToken === EthAddress ? WethAddress : sellToken;\n const zapInAmountUsdc = new BigNumber(\n await this.yearn.services.oracle.getNormalizedValueUsdc(oracleToken, amount).catch(() => {\n throw new PriceFetchingError(\"error fetching price\", PriceFetchingError.FETCHING_PRICE_ORACLE);\n })\n );\n\n const conversionRate = amountReceivedUsdc.div(new BigNumber(zapInAmountUsdc)).toNumber();\n\n const result: TransactionOutcome = {\n sourceTokenAddress: sellToken,\n sourceTokenAmount: amount,\n targetTokenAddress: zapInParams.buyTokenAddress,\n targetTokenAmount: tokensReceived,\n targetTokenAmountUsdc: amountReceivedUsdc.toFixed(0),\n targetUnderlyingTokenAddress: underlyingTokenAddress,\n targetUnderlyingTokenAmount: targetUnderlyingTokensReceived,\n conversionRate: conversionRate,\n slippage: 1 - conversionRate\n };\n\n return result;\n }\n\n private async directWithdraw(\n from: Address,\n toToken: Address,\n amount: Integer,\n fromVault: Address,\n vaultContract: VaultContract,\n options: SimulationOptions\n ): Promise {\n const encodedInputData = vaultContract.encodeWithdraw(amount);\n\n const tokensReceived = await this.simulationExecutor.simulateVaultInteraction(\n from,\n fromVault,\n encodedInputData,\n toToken,\n options\n );\n\n const targetTokenAmountUsdc = await this.yearn.services.oracle\n .getNormalizedValueUsdc(toToken, tokensReceived)\n .catch(() => {\n throw new PriceFetchingError(\"error fetching price\", PriceFetchingError.FETCHING_PRICE_ORACLE);\n });\n\n let result: TransactionOutcome = {\n sourceTokenAddress: fromVault,\n sourceTokenAmount: amount,\n targetTokenAddress: toToken,\n targetTokenAmount: tokensReceived,\n targetTokenAmountUsdc: targetTokenAmountUsdc,\n targetUnderlyingTokenAddress: toToken,\n targetUnderlyingTokenAmount: tokensReceived,\n conversionRate: 1,\n slippage: 0\n };\n\n return result;\n }\n\n private async zapOut(\n from: Address,\n toToken: Address,\n underlyingTokenAddress: Address,\n amount: Integer,\n fromVault: Address,\n skipGasEstimate: boolean,\n options: SimulationOptions\n ): Promise {\n if (!options.slippage) {\n throw new SdkError(\"slippage needs to be set\", SdkError.NO_SLIPPAGE);\n }\n\n const zapToken = toToken === EthAddress ? ZeroAddress : toToken;\n const zapOutParams = await this.yearn.services.zapper\n .zapOut(from, zapToken, amount, fromVault, \"0\", options.slippage, skipGasEstimate)\n .catch(() => {\n throw new ZapperError(\"error zapping out\", ZapperError.ZAP_OUT);\n });\n\n if (!skipGasEstimate) {\n options.gasLimit = zapOutParams.gas;\n }\n\n const tokensReceived = await (async () => {\n if (zapToken === ZeroAddress) {\n let response: SimulationResponse = await this.simulationExecutor.makeSimulationRequest(\n from,\n zapOutParams.to,\n zapOutParams.data,\n options,\n zapOutParams.value\n );\n return new BigNumber(response.transaction.transaction_info.call_trace.output).toFixed(0);\n } else {\n return await this.simulationExecutor.simulateVaultInteraction(\n from,\n zapOutParams.to,\n zapOutParams.data,\n toToken,\n options,\n zapOutParams.value\n );\n }\n })();\n\n const oracleToken = toToken === EthAddress ? WethAddress : toToken;\n const zapOutAmountUsdc = await this.yearn.services.oracle\n .getNormalizedValueUsdc(oracleToken, tokensReceived)\n .catch(() => {\n throw new PriceFetchingError(\"error fetching price\", PriceFetchingError.FETCHING_PRICE_ORACLE);\n });\n const soldAssetAmountUsdc = await this.yearn.services.oracle.getNormalizedValueUsdc(fromVault, amount).catch(() => {\n throw new PriceFetchingError(\"error fetching price\", PriceFetchingError.FETCHING_PRICE_ORACLE);\n });\n\n const conversionRate = new BigNumber(zapOutAmountUsdc).div(new BigNumber(soldAssetAmountUsdc)).toNumber();\n\n let result: TransactionOutcome = {\n sourceTokenAddress: fromVault,\n sourceTokenAmount: amount,\n targetTokenAddress: toToken,\n targetTokenAmount: tokensReceived,\n targetTokenAmountUsdc: zapOutAmountUsdc,\n targetUnderlyingTokenAddress: underlyingTokenAddress,\n targetUnderlyingTokenAmount: tokensReceived,\n conversionRate: conversionRate,\n slippage: 1 - conversionRate\n };\n\n return result;\n }\n\n private async simulateZapApprovalTransaction(\n zapApprovalTransaction: ZapApprovalTransactionOutput,\n options: SimulationOptions\n ): Promise {\n options.save = true;\n return await this.simulationExecutor.makeSimulationRequest(\n zapApprovalTransaction.from,\n zapApprovalTransaction.to,\n zapApprovalTransaction.data,\n options\n );\n }\n}\n","import { BigNumber } from \"@ethersproject/bignumber\";\nimport { Contract } from \"@ethersproject/contracts\";\nimport fetch from \"cross-fetch\";\n\nimport { CachedFetcher } from \"../cache\";\nimport { ChainId } from \"../chain\";\nimport { ServiceInterface } from \"../common\";\nimport { Address, StrategiesMetadata, StrategyMetadata } from \"../types\";\nimport { VaultStrategiesMetadata } from \"../types/strategy\";\n\ninterface VaultData {\n address: Address;\n token: {\n symbol: string;\n };\n strategies: {\n name: string;\n address: Address;\n }[];\n}\n\nconst VaultAbi = [\n \"function strategies(address) view returns (uint256 performanceFee, uint256 activation, uint256 debtRatio, uint256 rateLimit, uint256 lastReport, uint256 totalDebt, uint256 totalGain, uint256 totalLoss)\",\n \"function token() view returns (address)\",\n \"event StrategyAdded(address indexed strategy, uint256 debtRatio, uint256 minDebtPerHarvest, uint256 maxDebtPerHarvest, uint256 performanceFee)\"\n];\n\nconst TokenAbi = [\"function symbol() view returns (string)\"];\n\nexport class StrategyInterface extends ServiceInterface {\n private cachedFetcher = new CachedFetcher(\n \"strategies/metadata/get\",\n this.ctx,\n this.chainId\n );\n\n async vaultsStrategiesMetadata(vaultAddresses?: Address[]): Promise {\n const cached = await this.cachedFetcher.fetch();\n if (cached) {\n return cached;\n }\n\n let vaults: Address[];\n if (vaultAddresses) {\n vaults = vaultAddresses;\n } else {\n vaults = await this.yearn.services.lens.adapters.vaults.v2\n .assetsStatic()\n .then(assets => assets.map(asset => asset.address));\n }\n\n let vaultStrategiesMetadata: VaultStrategiesMetadata[] | undefined;\n\n try {\n vaultStrategiesMetadata = await this.fetchMetadataFromApi(vaults);\n } catch (error) {\n console.error(error);\n }\n\n if (!vaultStrategiesMetadata) {\n vaultStrategiesMetadata = await this.fetchMetadataFromChain(vaults);\n }\n\n return vaultStrategiesMetadata;\n }\n\n private async fetchMetadataFromApi(vaultAddresses: Address[]): Promise {\n const vaultsData = await this.fetchVaultsData();\n\n const strategiesMetadata = await this.yearn.services.meta.strategies();\n\n let vaultsStrategiesMetadataPromises: Promise[];\n vaultsStrategiesMetadataPromises = vaultAddresses.map(async vaultAddress => {\n const vaultDatum = vaultsData.find(datum => datum.address === vaultAddress);\n if (!vaultDatum) {\n return undefined;\n }\n const vaultContract = new Contract(vaultDatum.address, VaultAbi, this.ctx.provider.read);\n return this.fetchVaultStrategiesMetadata(\n vaultDatum.strategies,\n strategiesMetadata,\n vaultContract,\n vaultDatum.token.symbol\n );\n });\n\n return Promise.all(vaultsStrategiesMetadataPromises).then(vaultsStrategyData => {\n return vaultsStrategyData.flatMap(data => (data ? [data] : []));\n });\n }\n\n private async fetchMetadataFromChain(vaultAddresses: Address[]): Promise {\n const strategiesMetadata = await this.yearn.services.meta.strategies();\n const provider = this.ctx.provider.read;\n\n let vaultsStrategiesMetadataPromises: Promise[];\n vaultsStrategiesMetadataPromises = vaultAddresses.map(async vaultAddress => {\n const vaultContract = new Contract(vaultAddress, VaultAbi, provider);\n\n const strategiesPromise = this.yearn.services.helper.assetStrategiesAddresses(vaultAddress).then(addresses =>\n addresses.map(strat => {\n return {\n address: strat\n };\n })\n );\n\n const [strategies, underlyingTokenAddress] = await Promise.all([strategiesPromise, vaultContract.token()]);\n const underlyingTokenContract = new Contract(underlyingTokenAddress, TokenAbi, provider);\n const underlyingTokenSymbol = await underlyingTokenContract.symbol();\n\n return this.fetchVaultStrategiesMetadata(strategies, strategiesMetadata, vaultContract, underlyingTokenSymbol);\n });\n\n return Promise.all(vaultsStrategiesMetadataPromises).then(vaultsStrategyData =>\n vaultsStrategyData.flatMap(data => (data ? [data] : []))\n );\n }\n\n private async fetchVaultStrategiesMetadata(\n strategies: { address: Address; name?: string }[],\n strategiesMetadata: StrategiesMetadata[],\n vaultContract: Contract,\n underlyingTokenSymbol: string\n ): Promise {\n if (strategies.length === 0) {\n return undefined;\n }\n\n let metadata: StrategyMetadata[] = await Promise.all(\n strategies.map(async strategy => {\n let debtRatio: BigNumber;\n\n try {\n const struct = await vaultContract.strategies(strategy.address);\n debtRatio = struct.debtRatio as BigNumber;\n } catch (error) {\n return undefined;\n }\n\n if (debtRatio.lte(BigNumber.from(\"0\"))) {\n return undefined;\n }\n\n const metadatum = strategiesMetadata.find(strategiesMetadata =>\n strategiesMetadata.addresses.includes(strategy.address)\n );\n\n const metadata: StrategyMetadata = {\n address: strategy.address,\n name: metadatum?.name || strategy.name || \"Strategy\",\n description: metadatum?.description ?? \"I don't have a description for this strategy yet\",\n protocols: metadatum?.protocols ?? []\n };\n\n metadata.description = metadata?.description.replace(/{{token}}/g, underlyingTokenSymbol);\n\n return { data: metadata, debtRatio };\n })\n ).then(metadataAndDebtRatio =>\n metadataAndDebtRatio\n .flatMap(data => (data ? [data] : []))\n .sort((lhs, rhs) => {\n if (lhs.debtRatio.lt(rhs.debtRatio)) {\n return 1;\n } else if (lhs.debtRatio.eq(rhs.debtRatio)) {\n return 0;\n } else {\n return -1;\n }\n })\n .map(metadata => metadata.data)\n );\n\n if (metadata.length === 0) {\n return undefined;\n }\n\n const result: VaultStrategiesMetadata = {\n vaultAddress: vaultContract.address,\n strategiesMetadata: metadata\n };\n\n return result;\n }\n\n private async fetchVaultsData(): Promise {\n const res = await fetch(`https://api.yearn.finance/v1/chains/${this.chainId}/vaults/all`);\n\n if (!res.ok) {\n throw new Error(`An error has occured fetching vaults data: ${res.status}`);\n }\n\n return await res.json();\n }\n}\n","import { CallOverrides, Contract } from \"@ethersproject/contracts\";\nimport { TransactionRequest, TransactionResponse } from \"@ethersproject/providers\";\nimport BigNumber from \"bignumber.js\";\n\nimport { CachedFetcher } from \"../cache\";\nimport { ChainId } from \"../chain\";\nimport { ServiceInterface } from \"../common\";\nimport { EthAddress } from \"../helpers\";\nimport { PickleJars } from \"../services/partners/pickle\";\nimport { Address, Integer, TokenMetadata, TypedMap, Usdc, Vault, ZapProtocol } from \"../types\";\nimport { Balance, Icon, IconMap, Token } from \"../types\";\n\nconst TokenAbi = [\"function approve(address _spender, uint256 _value) public\"];\n\nexport class TokenInterface extends ServiceInterface {\n private cachedFetcherSupported = new CachedFetcher(\"tokens/supported\", this.ctx, this.chainId);\n\n /**\n * Get exchange rate between two tokens.\n * @param from\n * @param to\n * @returns exchange rate\n */\n async price(from: Address, to: Address): Promise {\n return this.yearn.services.oracle.getPriceFromRouter(from, to);\n }\n\n /**\n * Get the suggested Usdc exchange rate for an token.\n * @param token\n * @param overrides\n * @returns Usdc exchange rate (6 decimals)\n */\n async priceUsdc(token: T, overrides?: CallOverrides): Promise;\n\n /**\n * Get the suggested Usdc exchange rate for list of tokens.\n * @param tokens\n * @param overrides\n * @returns Usdc exchange rate map (6 decimals)\n */\n async priceUsdc(tokens: T[], overrides?: CallOverrides): Promise>;\n\n async priceUsdc(tokens: T | T[], overrides?: CallOverrides): Promise | Usdc> {\n if (Array.isArray(tokens)) {\n const entries = await Promise.all(\n tokens.map(async token => {\n const price = await this.yearn.services.oracle.getPriceUsdc(token, overrides);\n return [token, price];\n })\n );\n return Object.fromEntries(entries) as TypedMap;\n }\n return this.yearn.services.oracle.getPriceUsdc(tokens, overrides);\n }\n\n /**\n * Fetch token balances from the {@link TokenInterface.supported} list\n * for a particular address.\n * @param address\n */\n async balances(address: Address): Promise {\n const vaultBalances = await this.yearn.vaults\n .balances(address)\n .then(balances => balances.filter(token => token.balance !== \"0\"));\n\n switch (this.chainId) {\n case 1:\n case 1337: {\n let zapperBalances: Balance[] = [];\n try {\n zapperBalances = await this.yearn.services.zapper.balances(address);\n } catch (error) {\n console.error(error);\n }\n const vaultBalanceAddresses = new Set(vaultBalances.map(balance => balance.address));\n zapperBalances = zapperBalances.filter(balance => !vaultBalanceAddresses.has(balance.address));\n return zapperBalances.concat(vaultBalances);\n }\n case 250:\n case 42161: {\n let ironBankTokens = await this.yearn.ironBank.balances(address);\n const vaultBalanceAddresses = new Set(vaultBalances.map(balance => balance.address));\n ironBankTokens = ironBankTokens.filter(balance => !vaultBalanceAddresses.has(balance.address));\n return ironBankTokens.concat(vaultBalances);\n }\n default:\n console.error(`the chain ${this.chainId} hasn't been implemented yet`);\n return [];\n }\n }\n\n /**\n * Fetch all the tokens supported by the zapper protocol along with some basic\n * metadata.\n * @returns list of tokens supported by the zapper protocol.\n */\n async supported(): Promise {\n try {\n const cached = await this.cachedFetcherSupported.fetch();\n if (cached) {\n return cached;\n }\n\n if (this.chainId === 1 || this.chainId === 1337) {\n // only ETH Main is supported\n const tokens = await this.yearn.services.zapper.supportedTokens();\n const icons = await this.yearn.services.asset.ready.then(() =>\n this.yearn.services.asset.icon(tokens.map(token => token.address))\n );\n return tokens.map(token => {\n const icon = icons[token.address];\n return icon ? { ...token, icon } : token;\n });\n }\n\n console.error(`the chain ${this.chainId} hasn't been implemented yet`);\n } catch (error) {\n console.error(error);\n }\n\n return [];\n }\n\n /**\n * Approve vault to spend a token on zapIn\n * @param vault\n * @param token\n * @param amount\n * @param account\n * @returns transaction\n */\n async approve(\n vault: Vault,\n token: Address,\n amount: Integer,\n account: Address\n ): Promise {\n // If Ether is being sent, no need for approval\n if (EthAddress === token) return true;\n\n const signer = this.ctx.provider.write.getSigner(account);\n\n if (vault.token === token) {\n const tokenContract = new Contract(token, TokenAbi, signer);\n const tx = await tokenContract.populateTransaction.approve(vault.address, amount);\n return this.yearn.services.transaction.sendTransaction(tx);\n }\n\n const gasPrice = await this.yearn.services.zapper.gas();\n\n const gasPriceFastGwei = new BigNumber(gasPrice.fast).times(new BigNumber(10 ** 9));\n\n const zapProtocol = PickleJars.includes(vault.address) ? ZapProtocol.PICKLE : ZapProtocol.YEARN;\n\n const zapInApprovalState = await this.yearn.services.zapper.zapInApprovalState(account, token, zapProtocol);\n\n if (!zapInApprovalState.isApproved) {\n const zapInApprovalParams = await this.yearn.services.zapper.zapInApprovalTransaction(\n account,\n token,\n gasPriceFastGwei.toString(),\n zapProtocol\n );\n const transaction: TransactionRequest = {\n to: zapInApprovalParams.to,\n from: zapInApprovalParams.from,\n gasPrice: zapInApprovalParams.gasPrice,\n data: zapInApprovalParams.data as string\n };\n return signer.sendTransaction(transaction);\n }\n\n return true;\n }\n\n /**\n * Approve vault to spend a vault token on zapOut\n * @param vault\n * @param token\n * @param account\n * @returns transaction\n */\n async approveZapOut(vault: Vault, token: Address, account: Address): Promise {\n const signer = this.ctx.provider.write.getSigner(account);\n if (vault.token === token) {\n const gasPrice = await this.yearn.services.zapper.gas();\n const gasPriceFastGwei = new BigNumber(gasPrice.fast).times(new BigNumber(10 ** 9));\n\n let sellToken = token;\n\n const zapOutApprovalState = await this.yearn.services.zapper.zapOutApprovalState(account, sellToken);\n if (!zapOutApprovalState.isApproved) {\n const zapOutApprovalParams = await this.yearn.services.zapper.zapOutApprovalTransaction(\n account,\n sellToken,\n gasPriceFastGwei.toString()\n );\n const transaction: TransactionRequest = {\n to: zapOutApprovalParams.to,\n from: zapOutApprovalParams.from,\n gasPrice: zapOutApprovalParams.gasPrice,\n data: zapOutApprovalParams.data as string\n };\n return signer.sendTransaction(transaction);\n }\n }\n return false;\n }\n\n /**\n * Get an icon url for a particular address.\n * @param address\n */\n icon(address: T): Icon;\n\n /**\n * Get a map of icons for a list of addresses.\n * @param addresses\n */\n\n icon(addresses: T[]): IconMap;\n\n icon(address: T | T[]): IconMap | Icon {\n return this.yearn.services.asset.icon(address);\n }\n\n private cachedFetcher = new CachedFetcher(\"tokens/metadata\", this.ctx, this.chainId);\n\n async metadata(addresses?: Address[]): Promise {\n let result: TokenMetadata[];\n\n const cached = await this.cachedFetcher.fetch();\n if (cached) {\n result = cached;\n } else {\n result = await this.yearn.services.meta.tokens();\n }\n\n if (addresses) {\n return result.filter(metadata => addresses.includes(metadata.address));\n } else {\n return result;\n }\n }\n}\n","import { BigNumber } from \"@ethersproject/bignumber\";\nimport { CallOverrides, Contract } from \"@ethersproject/contracts\";\nimport { TransactionRequest, TransactionResponse } from \"@ethersproject/providers\";\n\nimport { CachedFetcher } from \"../cache\";\nimport { ChainId } from \"../chain\";\nimport { ServiceInterface } from \"../common\";\nimport { chunkArray, EthAddress, WethAddress } from \"../helpers\";\nimport { PickleJars } from \"../services/partners/pickle\";\nimport {\n Address,\n Apy,\n Balance,\n DepositOptions,\n Integer,\n SdkError,\n Token,\n TokenMetadata,\n VaultDynamic,\n VaultMetadataOverrides,\n VaultStatic,\n VaultsUserSummary,\n VaultUserMetadata,\n WithdrawOptions,\n ZapProtocol\n} from \"../types\";\nimport { Position, Vault } from \"../types\";\n\nconst VaultAbi = [\"function deposit(uint256 amount) public\", \"function withdraw(uint256 amount) public\"];\n\nexport class VaultInterface extends ServiceInterface {\n private cachedFetcherGet = new CachedFetcher(\"vaults/get\", this.ctx, this.chainId);\n private cachedFetcherGetDynamic = new CachedFetcher(\"vaults/getDynamic\", this.ctx, this.chainId);\n private cachedFetcherTokens = new CachedFetcher(\"vaults/tokens\", this.ctx, this.chainId);\n\n /**\n * Get all yearn vaults.\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async get(addresses?: Address[], overrides?: CallOverrides): Promise {\n const cached = await this.cachedFetcherGet.fetch();\n if (cached) {\n if (addresses) {\n return cached.filter(vault => addresses.includes(vault.address));\n } else {\n return cached;\n }\n }\n\n const vaultMetadataOverridesPromise = this.yearn.services.meta.vaults().catch(error => {\n console.error(error);\n return Promise.resolve([]);\n });\n\n const [vaultMetadataOverrides, assetsStatic] = await Promise.all([\n vaultMetadataOverridesPromise,\n this.getStatic(addresses, overrides)\n ]);\n\n let assetsDynamic: VaultDynamic[] = [];\n try {\n assetsDynamic = await this.getDynamic(addresses, vaultMetadataOverrides, overrides);\n } catch {\n const allAddresses = assetsStatic.map(asset => asset.address);\n const chunks = chunkArray(allAddresses, 30);\n const promises = chunks.map(async chunk => this.getDynamic(chunk, vaultMetadataOverrides, overrides));\n assetsDynamic = await Promise.all(promises).then(chunks => chunks.flat());\n }\n\n const strategiesMetadataPromise = this.yearn.strategies\n .vaultsStrategiesMetadata(assetsDynamic.map(asset => asset.address))\n .catch(error => {\n console.error(error);\n return Promise.resolve([]);\n });\n\n let assetsHistoricEarningsPromise = this.yearn.earnings.assetsHistoricEarnings().catch(error => {\n console.error(error);\n return Promise.resolve([]);\n });\n\n const [strategiesMetadata, assetsHistoricEarnings] = await Promise.all([\n strategiesMetadataPromise,\n assetsHistoricEarningsPromise\n ]);\n\n const assetsWithOrder: { vault: Vault; order: number }[] = [];\n\n for (const asset of assetsStatic) {\n const dynamic = assetsDynamic.find(({ address }) => asset.address === address);\n if (!dynamic) {\n throw new SdkError(`Dynamic asset does not exist for ${asset.address}`);\n }\n const overrides = vaultMetadataOverrides.find(override => override.address === asset.address);\n if (overrides?.hideAlways) {\n continue;\n }\n const order = overrides?.order ?? Math.max();\n\n dynamic.metadata.displayName = dynamic.metadata.displayName || asset.name;\n dynamic.metadata.strategies = strategiesMetadata.find(metadata => metadata.vaultAddress === asset.address);\n dynamic.metadata.historicEarnings = assetsHistoricEarnings.find(\n earnings => earnings.assetAddress === asset.address\n )?.dayData;\n\n assetsWithOrder.push({ vault: { ...asset, ...dynamic }, order });\n }\n\n return assetsWithOrder.sort((lhs, rhs) => lhs.order - rhs.order).map(asset => asset.vault);\n }\n\n /**\n * Get static part of yearn vaults.\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async getStatic(addresses?: Address[], overrides?: CallOverrides): Promise {\n const adapters = Object.values(this.yearn.services.lens.adapters.vaults);\n return await Promise.all(\n adapters.map(async adapter => {\n return await adapter.assetsStatic(addresses, overrides);\n })\n ).then(arr => arr.flat());\n }\n\n /**\n * Get dynamic part of yearn vaults.\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async getDynamic(\n addresses?: Address[],\n vaultMetadataOverrides?: VaultMetadataOverrides[],\n overrides?: CallOverrides\n ): Promise {\n const cached = await this.cachedFetcherGetDynamic.fetch();\n if (cached) {\n return addresses ? cached.filter(vault => addresses.includes(vault.address)) : cached;\n }\n\n let metadataOverrides = vaultMetadataOverrides\n ? vaultMetadataOverrides\n : await this.yearn.services.meta.vaults().catch(error => {\n console.error(error);\n return Promise.resolve([]);\n });\n\n const adapters = Object.values(this.yearn.services.lens.adapters.vaults);\n return await Promise.all(\n adapters.map(async adapter => {\n const data = await adapter.assetsDynamic(addresses, overrides);\n const assetsApy = await this.yearn.services.vision.apy(data.map(dynamic => dynamic.address));\n return data.map(dynamic => {\n const overrides = metadataOverrides.find(override => override.address === dynamic.address);\n dynamic.metadata.apy = assetsApy[dynamic.address];\n if (dynamic.tokenId === WethAddress) {\n const icon = this.yearn.services.asset.icon(EthAddress) ?? \"\";\n dynamic.metadata.displayIcon = icon;\n dynamic.metadata.displayName = \"ETH\";\n dynamic.metadata.defaultDisplayToken = EthAddress;\n } else {\n const icon = this.yearn.services.asset.icon(dynamic.tokenId) ?? \"\";\n dynamic.metadata.displayIcon = icon;\n const alias = this.yearn.services.asset.alias(dynamic.tokenId);\n dynamic.metadata.displayName = alias ? alias.symbol : \"\";\n dynamic.metadata.defaultDisplayToken = dynamic.tokenId;\n }\n if (overrides) {\n this.fillMetadataOverrides(dynamic, overrides);\n }\n return dynamic;\n });\n })\n ).then(arr => arr.flat());\n }\n\n /**\n * Get yearn vault positions for a particular address.\n * @param address\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async positionsOf(address: Address, addresses?: Address[], overrides?: CallOverrides): Promise {\n const adapters = Object.values(this.yearn.services.lens.adapters.vaults);\n return await Promise.all(\n adapters.map(async adapter => {\n try {\n return await adapter.positionsOf(address, addresses, overrides);\n } catch {\n let allAddresses: Address[];\n if (addresses) {\n allAddresses = addresses;\n } else {\n allAddresses = await this.getStatic(addresses, overrides).then(assets =>\n assets.map(asset => asset.address)\n );\n }\n const chunks = chunkArray(allAddresses, 30);\n const promises = chunks.map(async chunk => adapter.positionsOf(address, chunk, overrides));\n return await Promise.all(promises).then(chunks => chunks.flat());\n }\n })\n ).then(arr => arr.flat());\n }\n\n /**\n * Get the Vaults User Summary for a particular address.\n * @param address\n * @returns\n */\n async summaryOf(address: Address): Promise {\n const { earnings, holdings, grossApy, estimatedYearlyYield } = await this.yearn.earnings.accountAssetsData(address);\n return { earnings, holdings, grossApy, estimatedYearlyYield };\n }\n\n /**\n * Get the Vault User Metadata for a particular address.\n * @param address\n * @param addresses filter, if provided only those addresses' Vault User Metadata are returned\n * @returns\n */\n async metadataOf(address: Address, addresses?: Address[]): Promise {\n const { earningsAssetData } = await this.yearn.earnings.accountAssetsData(address);\n if (!addresses) return earningsAssetData;\n return earningsAssetData.filter(asset => addresses.includes(asset.assetAddress));\n }\n\n /**\n * Get all yearn vault's underlying token balances for a particular address.\n * @param address\n * @param overrides\n * @returns\n */\n async balances(address: Address, overrides?: CallOverrides): Promise {\n const tokens = await this.tokens();\n const balances = await this.yearn.services.helper.tokenBalances(\n address,\n tokens.map(token => token.address),\n overrides\n );\n return balances.map(balance => {\n const token = tokens.find(token => token.address === balance.address);\n if (!token) {\n throw new SdkError(`Token does not exist for Balance(${balance.address})`);\n }\n return {\n ...balance,\n token\n };\n });\n }\n\n /**\n * Get all yearn vault's underlying tokens.\n * @param overrides\n * @returns\n */\n async tokens(overrides?: CallOverrides): Promise {\n const cached = await this.cachedFetcherTokens.fetch();\n if (cached) {\n return cached;\n }\n\n const adapters = Object.values(this.yearn.services.lens.adapters.vaults);\n await this.yearn.services.asset.ready;\n return await Promise.all(\n adapters.map(async adapter => {\n const tokenAddresses = await adapter.tokens(overrides);\n const icons = this.yearn.services.asset.icon(tokenAddresses.concat(EthAddress));\n const tokensPromise = this.yearn.services.helper.tokens(tokenAddresses, overrides);\n const tokensMetadataPromise = this.yearn.tokens.metadata(tokenAddresses);\n\n const [tokens, tokensMetadata] = await Promise.all([tokensPromise, tokensMetadataPromise]);\n\n return Promise.all(\n tokens.map(async token => {\n const tokenMetadata = tokensMetadata.find(metadata => metadata.address === token.address);\n const result: Token = {\n ...token,\n icon: icons[token.address],\n supported: {},\n priceUsdc: await this.yearn.services.oracle.getPriceUsdc(token.address, overrides),\n metadata: tokenMetadata\n };\n const symbolOverride = this.yearn.services.asset.alias(token.address)?.symbol;\n if (symbolOverride) {\n result.symbol = symbolOverride;\n }\n if (tokenMetadata) {\n this.fillTokenMetadataOverrides(result, tokenMetadata);\n }\n return result;\n })\n );\n })\n ).then(arr => arr.flat());\n }\n\n /**\n * Deposit into a yearn vault\n * @param vault\n * @param token\n * @param amount\n * @param account\n * @param overrides\n * @returns transaction\n */\n async deposit(\n vault: Address,\n token: Address,\n amount: Integer,\n account: Address,\n options: DepositOptions = {},\n overrides: CallOverrides = {}\n ): Promise {\n const signer = this.ctx.provider.write.getSigner(account);\n const isZappingIntoPickleJar = PickleJars.includes(vault);\n\n if (isZappingIntoPickleJar) {\n return this.zapIn(vault, token, amount, account, options, ZapProtocol.PICKLE, overrides);\n }\n\n const [vaultRef] = await this.getStatic([vault], overrides);\n if (vaultRef.token === token) {\n if (token === EthAddress) {\n throw new SdkError(\"deposit:v2:eth not implemented\");\n } else {\n const vaultContract = new Contract(vault, VaultAbi, signer);\n const makeTransaction = async (overrides: CallOverrides) => {\n const tx = await vaultContract.populateTransaction.deposit(amount, overrides);\n return this.yearn.services.transaction.sendTransaction(tx);\n };\n return this.executeVaultContractTransaction(makeTransaction, overrides);\n }\n } else {\n return this.zapIn(vault, token, amount, account, options, ZapProtocol.YEARN, overrides);\n }\n }\n\n /**\n * Withdraw from a yearn vault.\n * @param vault\n * @param token\n * @param amount\n * @param account\n * @param overrides\n * @returns transaction\n */\n async withdraw(\n vault: Address,\n token: Address,\n amount: Integer,\n account: Address,\n options: WithdrawOptions = {},\n overrides: CallOverrides = {}\n ): Promise {\n const [vaultRef] = await this.getStatic([vault], overrides);\n const signer = this.ctx.provider.write.getSigner(account);\n if (vaultRef.token === token) {\n const vaultContract = new Contract(vault, VaultAbi, signer);\n const makeTransaction = async (overrides: CallOverrides) => {\n const tx = await vaultContract.populateTransaction.withdraw(amount, overrides);\n return this.yearn.services.transaction.sendTransaction(tx);\n };\n return this.executeVaultContractTransaction(makeTransaction, overrides);\n } else {\n if (options.slippage === undefined) {\n throw new SdkError(\"zap operations should have a slippage set\");\n }\n\n const zapOutParams = await this.yearn.services.zapper.zapOut(\n account,\n token,\n amount,\n vault,\n \"0\",\n options.slippage,\n false,\n undefined,\n options.signature\n );\n\n const transactionRequest: TransactionRequest = {\n to: zapOutParams.to,\n from: zapOutParams.from,\n gasPrice: BigNumber.from(zapOutParams.gasPrice),\n gasLimit: BigNumber.from(zapOutParams.gas),\n data: zapOutParams.data,\n value: BigNumber.from(zapOutParams.value)\n };\n\n return this.executeZapperTransaction(transactionRequest, overrides, BigNumber.from(zapOutParams.gasPrice));\n }\n }\n\n private async zapIn(\n vault: Address,\n token: Address,\n amount: Integer,\n account: Address,\n options: DepositOptions = {},\n zapProtocol: ZapProtocol = ZapProtocol.YEARN,\n overrides: CallOverrides = {}\n ): Promise {\n if (options.slippage === undefined) {\n throw new SdkError(\"zap operations should have a slippage set\");\n }\n\n const zapInParams = await this.yearn.services.zapper.zapIn(\n account,\n token,\n amount,\n vault,\n \"0\",\n options.slippage,\n false,\n zapProtocol\n );\n\n const transactionRequest: TransactionRequest = {\n to: zapInParams.to,\n from: zapInParams.from,\n data: zapInParams.data,\n value: BigNumber.from(zapInParams.value),\n gasLimit: BigNumber.from(zapInParams.gas)\n };\n\n return this.executeZapperTransaction(transactionRequest, overrides, BigNumber.from(zapInParams.gasPrice));\n }\n\n private async executeZapperTransaction(\n transactionRequest: TransactionRequest,\n overrides: CallOverrides,\n fallbackGasPrice: BigNumber\n ): Promise {\n try {\n const combinedParams = { ...transactionRequest, ...overrides };\n combinedParams.gasPrice = undefined;\n return await this.yearn.services.transaction.sendTransaction(combinedParams);\n } catch (error) {\n if ((error as any).code === -32602) {\n const combinedParams = { ...transactionRequest, ...overrides };\n combinedParams.maxFeePerGas = undefined;\n combinedParams.maxPriorityFeePerGas = undefined;\n combinedParams.gasPrice = overrides.gasPrice || fallbackGasPrice;\n return await this.yearn.services.transaction.sendTransaction(combinedParams);\n }\n\n throw error;\n }\n }\n\n private async executeVaultContractTransaction(\n makeTransaction: (overrides: CallOverrides) => Promise,\n overrides: CallOverrides\n ): Promise {\n const originalGasPrice = overrides.gasPrice;\n try {\n overrides.gasPrice = undefined;\n const tx = await makeTransaction(overrides);\n return tx;\n } catch (error) {\n if ((error as any).code === -32602) {\n overrides.maxFeePerGas = undefined;\n overrides.maxPriorityFeePerGas = undefined;\n overrides.gasPrice = originalGasPrice;\n const tx = await makeTransaction(overrides);\n return tx;\n }\n\n throw error;\n }\n }\n\n private fillTokenMetadataOverrides(token: Token, overrides: TokenMetadata) {\n if (overrides.tokenIconOverride) {\n token.icon = overrides.tokenIconOverride;\n }\n if (overrides.tokenSymbolOverride) {\n token.symbol = overrides.tokenSymbolOverride;\n }\n if (overrides.tokenNameOverride) {\n token.name = overrides.tokenNameOverride;\n }\n }\n\n private fillMetadataOverrides(dynamic: VaultDynamic, overrides: VaultMetadataOverrides) {\n if (overrides.displayName) {\n dynamic.metadata.displayName = overrides.displayName;\n }\n if (overrides.vaultSymbolOverride) {\n dynamic.metadata.symbol = overrides.vaultSymbolOverride;\n }\n if (overrides.vaultIconOverride) {\n dynamic.metadata.displayIcon = overrides.vaultIconOverride;\n }\n if (overrides.apyTypeOverride) {\n if (!dynamic.metadata.apy) {\n dynamic.metadata.apy = this.makeEmptyApy();\n }\n dynamic.metadata.apy.type = overrides.apyTypeOverride;\n }\n if (overrides.apyOverride) {\n if (!dynamic.metadata.apy) {\n dynamic.metadata.apy = this.makeEmptyApy();\n }\n dynamic.metadata.apy.net_apy = overrides.apyOverride;\n dynamic.metadata.apy.type = \"override\";\n }\n\n dynamic.metadata.depositsDisabled = overrides.depositsDisabled;\n dynamic.metadata.withdrawalsDisabled = overrides.withdrawalsDisabled;\n dynamic.metadata.allowZapIn = overrides.allowZapIn;\n dynamic.metadata.allowZapOut = overrides.allowZapOut;\n dynamic.metadata.migrationContract = overrides.migrationContract;\n dynamic.metadata.migrationTargetVault = overrides.migrationTargetVault;\n dynamic.metadata.vaultNameOverride = overrides.vaultNameOverride;\n dynamic.metadata.vaultDetailPageAssets = overrides.vaultDetailPageAssets;\n\n dynamic.metadata.hideIfNoDeposits =\n dynamic.metadata.emergencyShutdown || overrides.retired || overrides.migrationAvailable || false;\n dynamic.metadata.migrationAvailable = dynamic.metadata.migrationAvailable || overrides.migrationAvailable || false;\n }\n\n private makeEmptyApy(): Apy {\n const apy: Apy = {\n type: \"manual_override\",\n gross_apr: 0,\n net_apy: 0,\n fees: { performance: null, withdrawal: null, management: null, keep_crv: null, cvx_keep_crv: null },\n points: null,\n composite: null\n };\n return apy;\n }\n}\n","/**\n * Storing ABIs in Human-Readable ABI format.\n * https://blog.ricmoo.com/human-readable-contract-abis-in-ethers-js-141902f4d917\n */\n\nexport const TokenAbi = \"tuple(address address, string name, string symbol, uint256 decimals)\";\nexport const TokenPriceAbi = \"tuple(address address, uint256 priceUsdc)\";\nexport const TokenBalanceAbi = `tuple(\n address address, \n uint256 priceUsdc, \n uint256 balance,\n uint256 balanceUsdc\n)`;\nexport const AllowanceAbi = \"tuple(address owner, address spender, uint256 amount, address token)\";\n\nexport const AssetStaticAbi = `tuple(\n address address,\n string typeId,\n address token,\n string name,\n string version,\n string symbol,\n uint8 decimals,\n)`;\n\nexport const AssetDynamicAbi = (Metadata: string) => `tuple(\n address address, \n string typeId,\n address tokenId,\n tuple(uint256 amount, uint256 amountUsdc) underlyingTokenBalance,\n ${Metadata} metadata\n)`;\n\nexport const PositionAbi =\n \"tuple(address assetAddress, address tokenAddress, string typeId, uint256 balance,\" +\n \"tuple(uint256 amount, uint256 amountUsdc) underlyingTokenBalance,\" +\n \"tuple(address owner, address spender, uint256 amount)[] tokenAllowances,\" +\n \"tuple(address owner, address spender, uint256 amount)[] assetAllowances)\";\n\nexport const AdapterAbi = (Metadata: string) => [\n `function assetsStatic() public view returns (${AssetStaticAbi}[] memory)`,\n `function assetsStatic(address[] memory) public view returns (${AssetStaticAbi}[] memory)`,\n `function assetsDynamic() public view returns (${AssetDynamicAbi(Metadata)}[] memory)`,\n `function assetsDynamic(address[] memory) public view returns (${AssetDynamicAbi(Metadata)}[] memory)`,\n `function assetsPositionsOf(address) public view returns (${PositionAbi}[] memory)`,\n `function assetsPositionsOf(address, address[] memory) public view returns (${PositionAbi}[] memory)`,\n `function assetsTokensAddresses() public view returns (address[] memory)`\n];\n","/**\n * Utility functions to convert raw structures returned from ethers to plain\n * javascript objects.\n *\n * eg.\n *\n * ```javascript\n * [\n * 1,\n * \"hello\"\n * \"a\": 1,\n * \"b\": \"hello\"\n * ]\n * ```\n *\n * to\n *\n * ```javascript\n * {\n * \"a\": 1,\n * \"b\": \"hello\"\n * }\n * ```\n */\n\nimport { isBigNumberish } from \"@ethersproject/bignumber/lib/bignumber\";\n\n// convert tuples\nexport function struct(tuple: any): any {\n if (typeof tuple !== \"object\") return tuple;\n const keys = Object.keys(tuple);\n\n // check if tuple is actually an array\n // [1, 2, 3] => array vs [1, 2, 3, \"a\": 1, \"b\": 2, \"c\": 3] => object\n // NOTE: [] are not picked up as array (see *)\n const properties = keys.filter(key => isNaN(Number(key)));\n if (properties.length === 0) return structArray(tuple);\n\n const copy: Record = {};\n\n properties.forEach((property: string) => {\n const value = tuple[property];\n if (typeof value === \"object\" && !isBigNumberish(value)) {\n // recursive!\n copy[property] = struct(value);\n } else if (Array.isArray(value)) {\n // (*) all empty arrays are picked up here\n copy[property] = value;\n } else if (isBigNumberish(value)) {\n // all BigNumbers are converted to strings\n copy[property] = value.toString();\n } else {\n copy[property] = value;\n }\n });\n\n return copy;\n}\n\n// convert arrays\nexport function structArray(tuples: any[]): any[] {\n return tuples.map(tuple => struct(tuple));\n}\n","import { BigNumber as EthersBigNumber } from \"@ethersproject/bignumber\";\nimport { CallOverrides } from \"@ethersproject/contracts\";\nimport { BigNumber } from \"bignumber.js\";\n\nimport { AdapterAbi } from \"../../abi\";\nimport { ChainId } from \"../../chain\";\nimport { ContractService } from \"../../common\";\nimport { Context } from \"../../context\";\nimport { struct, structArray } from \"../../struct\";\nimport {\n Address,\n CyTokenUserMetadata,\n Integer,\n IronBankMarketDynamic,\n IronBankMarketStatic,\n IronBankUserSummary,\n Position\n} from \"../../types\";\n\nconst CyTokenMetadataAbi = `tuple(\n uint256 totalSuppliedUsdc,\n uint256 totalBorrowedUsdc,\n uint256 lendAprBips,\n uint256 borrowAprBips,\n uint256 liquidity,\n uint256 liquidityUsdc,\n uint256 totalCollateralTokens,\n uint256 collateralFactor,\n uint256 collateralCap,\n bool isActive,\n uint256 reserveFactor,\n uint256 exchangeRate\n)`;\n\nconst CyTokenUserMetadataAbi = `tuple(\n address assetAddress,\n bool enteredMarket,\n uint256 supplyBalanceUsdc,\n uint256 borrowBalanceUsdc,\n uint256 collateralBalanceUsdc,\n uint256 borrowLimitUsdc\n)`;\n\nconst IronBankUserSummaryAbi = `tuple(\n uint256 supplyBalanceUsdc,\n uint256 borrowBalanceUsdc,\n uint256 borrowLimitUsdc,\n uint256 utilizationRatioBips\n)`;\n\nconst CustomAbi = [\n `function adapterPositionOf(address) external view returns (${IronBankUserSummaryAbi} memory)`,\n `function assetsUserMetadata(address) public view returns (${CyTokenUserMetadataAbi}[] memory)`,\n `function blocksPerYear() public view returns (uint256)`\n];\n\nexport class IronBankAdapter extends ContractService {\n static abi = AdapterAbi(CyTokenMetadataAbi).concat(CustomAbi);\n\n constructor(chainId: T, ctx: Context) {\n super(ctx.addresses.adapters.ironBank ?? IronBankAdapter.addressByChain(chainId), chainId, ctx);\n }\n\n /**\n * Get most up-to-date address of the IronBank adapter contract for a\n * particular chain id.\n * @param chainId\n * @returns address\n */\n static addressByChain(chainId: ChainId): string {\n switch (chainId) {\n case 1:\n case 1337:\n return \"0x5D03ad44F4Fce73407C73A1779295011691D2e1F\";\n case 250:\n return \"0xC31E8C238287448f0d0CCF65df40424eeF429940\";\n case 42161:\n return \"0x7AAd416eB4e16a27b85e7076dD56742A44E9d25B\";\n }\n }\n\n /**\n * Get the static part of IronBank assets.\n * @param addresses filter, if not provided all assets are returned\n * @param overrides\n * @returns static\n */\n async assetsStatic(addresses?: Address[], overrides: CallOverrides = {}): Promise {\n if (addresses) {\n return await this.contract.read[\"assetsStatic(address[])\"](addresses, overrides).then(structArray);\n }\n return await this.contract.read[\"assetsStatic()\"](overrides).then(structArray);\n }\n\n /**\n * Get the dynamic part of IronBank assets.\n * @param addresses filter, if not provided all assets are returned\n * @param overrides\n * @returns dynamic\n */\n async assetsDynamic(addresses?: Address[], overrides: CallOverrides = {}): Promise {\n const assetsPromise: Promise = addresses\n ? this.contract.read[\"assetsDynamic(address[])\"](addresses, overrides).then(structArray)\n : this.contract.read[\"assetsDynamic()\"](overrides).then(structArray);\n\n const [assets, blocksPerYear] = await Promise.all([assetsPromise, this.blocksPerYear()]);\n for (const asset of assets) {\n asset.metadata.lendApyBips = this.aprBipsToApyBips(asset.metadata.lendAprBips, blocksPerYear);\n asset.metadata.borrowApyBips = this.aprBipsToApyBips(asset.metadata.borrowAprBips, blocksPerYear);\n }\n return assets;\n }\n\n /**\n * Get all IronBankMarket asset positions for a particular address.\n * @param address\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n async positionsOf(address: Address, addresses?: Address[], overrides: CallOverrides = {}): Promise {\n if (addresses) {\n return await this.contract.read[\"assetsPositionsOf(address,address[])\"](address, addresses, overrides).then(\n structArray\n );\n }\n return await this.contract.read[\"assetsPositionsOf(address)\"](address, overrides).then(structArray);\n }\n\n /**\n * Get the IronBank Position for a particular address.\n * @param address\n * @param overrides\n * @returns\n */\n async generalPositionOf(address: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.adapterPositionOf(address, overrides).then(struct);\n }\n\n /**\n * Get the IronBank User Metadata for a particular address.\n * @param address\n * @param overrides\n * @returns\n */\n async assetsUserMetadata(\n address: Address,\n addresses?: Address[],\n overrides: CallOverrides = {}\n ): Promise {\n if (addresses) {\n return await this.contract.read[\"assetsUserMetadata(address,address[])\"](address, addresses, overrides).then(\n structArray\n );\n }\n return await this.contract.read[\"assetsUserMetadata(address)\"](address, overrides).then(structArray);\n }\n\n /**\n * Get all IronBank underlying token addresses.\n * @param overrides\n * @returns\n */\n async tokens(overrides: CallOverrides = {}): Promise {\n return await this.contract.read.assetsTokensAddresses(overrides);\n }\n\n async blocksPerYear(overrides: CallOverrides = {}): Promise {\n const blocks: EthersBigNumber = await this.contract.read[\"blocksPerYear\"](overrides);\n return blocks.toString();\n }\n\n private aprBipsToApyBips(aprBips: Integer, period: Integer): Integer {\n const bn = BigNumber.clone({ POW_PRECISION: 6 });\n const apy = new bn(aprBips)\n .div(new bn(10).pow(4))\n .div(period)\n .plus(1)\n .pow(period)\n .minus(1)\n .multipliedBy(new bn(10).pow(4))\n .toFixed(0);\n\n return apy;\n }\n}\n","import { CallOverrides } from \"@ethersproject/contracts\";\n\nimport { AdapterAbi } from \"../../abi\";\nimport { ChainId } from \"../../chain\";\nimport { ContractService } from \"../../common\";\nimport { Context } from \"../../context\";\nimport { ZeroAddress } from \"../../helpers\";\nimport { structArray } from \"../../struct\";\nimport { Address, Position, VaultDynamic, VaultStatic } from \"../../types\";\n\nexport interface IRegistryAdapter {\n assetsStatic(addresses?: Address[], overrides?: CallOverrides): Promise;\n assetsDynamic(addresses?: Address[], overrides?: CallOverrides): Promise;\n positionsOf(address: Address, addresses?: Address[], overrides?: CallOverrides): Promise;\n tokens(overrides?: CallOverrides): Promise;\n}\n\nconst VaultV2MetadataAbi = `tuple(\n uint256 pricePerShare,\n bool migrationAvailable,\n address latestVaultAddress,\n uint256 depositLimit,\n bool emergencyShutdown\n)`;\n\nexport class RegistryV2Adapter extends ContractService implements IRegistryAdapter {\n static abi = AdapterAbi(VaultV2MetadataAbi);\n\n constructor(chainId: T, ctx: Context) {\n super(ctx.addresses.adapters.registryV2 ?? RegistryV2Adapter.addressByChain(chainId), chainId, ctx);\n }\n\n /**\n * Get most up-to-date address of the Vault V2 adapter contract for a\n * particular chain id.\n * @param chainId\n * @returns address\n */\n static addressByChain(chainId: ChainId): string {\n switch (chainId) {\n case 1:\n case 1337:\n return \"0x240315db938d44bb124ae619f5fd0269a02d1271\";\n case 250:\n return \"0xF628Fb7436fFC382e2af8E63DD7ccbaa142E3cd1\";\n case 42161:\n return \"0x57AA88A0810dfe3f9b71a9b179Dd8bF5F956C46A\";\n }\n }\n\n /**\n * Get the static part of Vault assets.\n * @param addresses filter, if not provided all assets are returned\n * @param overrides\n * @returns static\n */\n async assetsStatic(addresses?: Address[], overrides: CallOverrides = {}): Promise {\n if (addresses) {\n return await this.contract.read[\"assetsStatic(address[])\"](addresses, overrides).then(structArray);\n }\n return await this.contract.read[\"assetsStatic()\"]().then(structArray);\n }\n\n /**\n * Get the dynamic part of Vault assets.\n * @param addresses filter, if not provided all assets are returned\n * @param overrides\n * @returns dynamic\n */\n async assetsDynamic(addresses?: Address[], overrides: CallOverrides = {}): Promise {\n if (addresses) {\n return await this.contract.read[\"assetsDynamic(address[])\"](addresses, overrides)\n .then(structArray)\n .then((assets: any) =>\n assets.map((asset: any) => ({\n ...asset,\n metadata: {\n controller: ZeroAddress,\n totalAssets: \"0\",\n totalSupply: \"0\",\n ...asset.metadata\n }\n }))\n );\n }\n return await this.contract.read[\"assetsDynamic()\"]()\n .then(structArray)\n .then((assets: any) =>\n assets.map((asset: any) => {\n return {\n ...asset,\n metadata: {\n controller: ZeroAddress,\n totalAssets: \"0\",\n totalSupply: \"0\",\n ...asset.metadata\n }\n };\n })\n );\n }\n\n /**\n * Get all Vault asset positions for a particular address.\n * @param address\n * @param addresses filter, if not provided all positions are returned\n * @param overrides\n * @returns\n */\n\n async positionsOf(address: Address, addresses?: Address[], overrides: CallOverrides = {}): Promise {\n if (addresses) {\n return await this.contract.read[\"assetsPositionsOf(address,address[])\"](address, addresses, overrides).then(\n structArray\n );\n }\n return await this.contract.read[\"assetsPositionsOf(address)\"](address, overrides).then(structArray);\n }\n\n /**\n * Get all Vault underlying token addresses.\n * @param overrides\n * @returns\n */\n async tokens(overrides: CallOverrides = {}): Promise {\n return await this.contract.read.assetsTokensAddresses(overrides);\n }\n}\n","import fetch from \"cross-fetch\";\n\nimport { ChainId } from \"../chain\";\nimport { Service } from \"../common\";\nimport { Context } from \"../context\";\nimport { handleHttpError, WethAddress } from \"../helpers\";\nimport { Address, Alias, AliasMap, AssetServiceState, Icon, IconMap } from \"../types\";\n\nconst YearnAliases = \"https://raw.githubusercontent.com/yearn/yearn-assets/master/icons/aliases.json\";\nconst YearnAssets = (chainId: ChainId) =>\n `https://api.github.com/repos/yearn/yearn-assets/contents/icons/multichain-tokens/${chainId}`;\nconst TrustAssets = \"https://raw.githack.com/trustwallet/assets/master/blockchains/ethereum/tokenlist.json\";\n\nconst YearnAsset = (address: Address, chainId: ChainId) =>\n `https://raw.githack.com/yearn/yearn-assets/master/icons/multichain-tokens/${chainId}/${address}/logo-128.png`;\nconst YearnAssetAlt = (address: Address, chainId: ChainId) =>\n `https://raw.githack.com/yearn/yearn-assets/master/icons/multichain-tokens/${chainId}/${address}/logo-alt-128.png`;\nconst TrustAsset = (address: Address) =>\n `https://raw.githack.com/trustwallet/assets/master/blockchains/ethereum/assets/${address}/logo.png`;\n\n/**\n * [[AssetService]] fetches correct icons & aliases related to eth addresses\n * from trusted asset sources\n */\nexport class AssetService extends Service {\n static deserializeState(data: string): AssetServiceState {\n const obj = JSON.parse(data);\n const supported = new Map(JSON.parse(obj.supported));\n const aliases = new Map(JSON.parse(obj.aliases));\n return { supported, aliases };\n }\n\n ready: Promise;\n supported: Map;\n aliases: Map;\n\n private alts = [WethAddress];\n\n constructor(chainId: ChainId, ctx: Context, state?: AssetServiceState) {\n super(chainId, ctx);\n if (state) {\n this.supported = state.supported;\n this.aliases = state.aliases;\n this.ready = Promise.resolve();\n } else {\n this.supported = new Map();\n this.aliases = new Map();\n this.ready = this.initialize();\n }\n }\n\n async makeSerializedState(): Promise {\n await this.ready;\n const supportedJson = JSON.stringify(Array.from(this.supported.entries()));\n const aliasesJson = JSON.stringify(Array.from(this.aliases.entries()));\n return JSON.stringify({ supported: supportedJson, aliases: aliasesJson });\n }\n\n private async initialize(): Promise {\n if (this.chainId === 1 || this.chainId === 1337) {\n const aliases: Alias[] = await fetch(YearnAliases)\n .then(handleHttpError)\n .then(res => res.json())\n .catch(error => {\n console.error(error);\n return [];\n });\n\n for (const alias of aliases) {\n this.aliases.set(alias.address, alias);\n }\n\n const trust = await fetch(TrustAssets)\n .then(handleHttpError)\n .then(res => res.json())\n .then(res => res.tokens)\n .catch(error => {\n console.error(error);\n return [];\n });\n\n for (const token of trust) {\n this.supported.set(token.address, TrustAsset(token.address));\n }\n }\n\n const yearn = await fetch(YearnAssets(this.chainId))\n .then(handleHttpError)\n .then(res => res.json())\n .catch(error => {\n console.error(error);\n return [];\n });\n\n for (const token of yearn) {\n this.supported.set(token.name, YearnAsset(token.name, this.chainId));\n if (this.alts.includes(token.name)) {\n this.supported.set(token.name, YearnAssetAlt(token.name, this.chainId));\n } else {\n this.supported.set(token.name, YearnAsset(token.name, this.chainId));\n }\n }\n }\n\n /**\n * Get an icon url for a particular address.\n * @param address\n */\n icon(address: T): Icon;\n\n /**\n * Get a map of icons for a list of addresses.\n * @param addresses\n */\n icon(addresses: T[]): IconMap;\n\n icon(address: T | T[]): IconMap | Icon;\n icon(address: T | T[]): IconMap | Icon {\n if (!Array.isArray(address)) {\n return this.supported.get(address);\n }\n return Object.fromEntries(address.map(address => [address, this.supported.get(address)])) as IconMap;\n }\n\n /**\n * Get an alias for a particular address.\n * @param address\n */\n alias(address: T): Alias | undefined;\n\n /**\n * Get a map of aliases for a list of addresses.\n * @param addresses\n */\n alias(addresses: T[]): AliasMap;\n\n alias(address: T | T[]): AliasMap | Alias | undefined;\n alias(address: T | T[]): AliasMap | Alias | undefined {\n if (!Array.isArray(address)) {\n return this.aliases.get(address);\n }\n return Object.fromEntries(address.map(address => [address, this.aliases.get(address)])) as AliasMap;\n }\n}\n","import { CallOverrides } from \"@ethersproject/contracts\";\n\nimport { ChainId } from \"../chain\";\nimport { ContractService } from \"../common\";\nimport { Context } from \"../context\";\nimport { structArray } from \"../struct\";\nimport { Address, GenericAsset, Position } from \"../types\";\nimport { IronBankAdapter } from \"./adapters/ironbank\";\nimport { IRegistryAdapter, RegistryV2Adapter } from \"./adapters/registry\";\n\nexport const LensAbi = [\"function getRegistries() external view returns (address[] memory)\"];\n\nexport type Adapters = {\n vaults: {\n v1: IRegistryAdapter;\n v2: RegistryV2Adapter;\n };\n ironBank: IronBankAdapter;\n};\n\n/**\n * [[LensService]] provides access to all yearn's assets and user positions.\n * It's implemented in the form of a contract that lives on all networks\n * supported by yearn.\n */\nexport class LensService extends ContractService {\n static abi = LensAbi;\n\n constructor(chainId: T, ctx: Context) {\n super(ctx.addresses.lens ?? LensService.addressByChain(chainId), chainId, ctx);\n }\n\n get adapters(): Adapters {\n return {\n vaults: {\n v2: new RegistryV2Adapter(this.chainId, this.ctx)\n },\n ironBank: new IronBankAdapter(this.chainId, this.ctx)\n } as Adapters;\n }\n\n /**\n * Get most up-to-date address of the Lens contract for a particular chain id.\n * @param chainId\n * @returns address\n */\n static addressByChain(chainId: ChainId): string {\n switch (chainId) {\n case 1: // FIXME: doesn't actually exist\n case 250: // ditto\n case 1337: // ditto\n case 42161: // ditto\n return \"0xFa58130BE296EDFA23C42a1d15549fA91449F979\";\n }\n }\n\n /**\n * Get all the adapter addresses attached to Lens.\n * @param overrides\n * @returns list of registry addresses\n */\n async getAdapters(overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getRegistries(overrides);\n }\n\n /**\n * Get all the assets from all the adapters attached to Lens.\n * @param overrides\n * @returns list of assets\n */\n async getAssets(overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getAssets(overrides).then(structArray);\n }\n\n /**\n * Get all positions of a particular assets for all the assets in all the\n * adapters attached to lens.\n * @param address\n * @param overrides\n * @returns list of user positions\n */\n async getPositions(address: string, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getPositionsOf(address, overrides).then(structArray);\n }\n\n /**\n * Get all the assets from a specific Lens adapter.\n * @param adapter\n * @param overrides\n * @returns list of assets\n */\n async getAssetsFromAdapter(adapter: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getAssetsFromAdapter(adapter, overrides).then(structArray);\n }\n}\n","import { CallOverrides } from \"@ethersproject/contracts\";\n\nimport { ChainId } from \"../chain\";\nimport { ContractService } from \"../common\";\nimport { Context } from \"../context\";\nimport { int } from \"../helpers\";\nimport { Address, Integer, Usdc } from \"../types\";\n\nexport const OracleAbi = [\n // Oracle general\n \"function calculations() external view returns (address[] memory)\",\n \"function getPriceUsdcRecommended(address) public view returns (uint256)\",\n \"function usdcAddress() public view returns (address)\",\n \"function getNormalizedValueUsdc(address,uint256) view returns (uint256)\",\n // Calculations Curve\n \"function isCurveLpToken(address) public view returns (bool)\",\n \"function getCurvePriceUsdc(address) public view returns (uint256)\",\n \"function getBasePrice(address) public view returns (uint256)\",\n \"function getVirtualPrice(address) public view returns (uint256)\",\n \"function curveRegistryAddress() public view returns (address)\",\n // Calculations Iron Bank\n \"function isIronBankMarket(address) public view returns (bool)\",\n \"function getIronBankMarketPriceUsdc(address) public view returns (uint256)\",\n \"function getIronBankMarkets() public view returns (address[] memory)\",\n // Calculations Sushiswap\n \"function isLpToken(address) public view returns (bool)\",\n \"function getPriceFromRouter(address, address) public view returns (uint256)\",\n \"function getPriceFromRouterUsdc(address) public view returns (uint256)\",\n \"function getLpTokenTotalLiquidityUsdc(address) public view returns (uint256)\",\n \"function getLpTokenPriceUsdc(address) public view returns (uint256)\"\n];\n\n/**\n * [[OracleService]] is the main pricing engine, used by all price calculations.\n * It's implemented in the form of a contract that lives on all networks\n * supported by yearn.\n */\nexport class OracleService extends ContractService {\n static abi = OracleAbi;\n\n constructor(chainId: T, ctx: Context) {\n super(ctx.addresses.oracle ?? OracleService.addressByChain(chainId), chainId, ctx);\n }\n\n /**\n * Get most up-to-date address of the Oracle contract for a particular chain\n * id.\n * @param chainId\n * @returns address\n */\n static addressByChain(chainId: ChainId): string {\n switch (chainId) {\n case 1:\n case 1337:\n return \"0x83d95e0D5f402511dB06817Aff3f9eA88224B030\";\n case 250:\n return \"0x57AA88A0810dfe3f9b71a9b179Dd8bF5F956C46A\";\n case 42161:\n return \"0x043518AB266485dC085a1DB095B8d9C2Fc78E9b9\";\n }\n }\n\n /**\n * Fetch all the active Oracle calculations.\n * @param overrides\n * @returns list of calculations contract addresses\n */\n async getCalculations(overrides: CallOverrides = {}): Promise {\n return await this.contract.read.calculations(overrides);\n }\n\n /**\n * Get the suggested Usdc exchange rate for an token.\n * @param token\n * @param overrides\n * @returns Usdc exchange rate (6 decimals)\n */\n async getPriceUsdc(token: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getPriceUsdcRecommended(token, overrides).then(int);\n }\n\n /**\n * Get the normalized Usdc value for the token and corresponding quantity.\n * @param token\n * @param amount\n * @param overrides\n * @returns Usdc exchange rate (6 decimals)\n */\n async getNormalizedValueUsdc(token: Address, amount: Integer, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getNormalizedValueUsdc(token, amount, overrides).then(int);\n }\n\n /**\n * Get the token address that lens considers Usdc.\n * @param overrides\n * @returns address\n */\n async getUsdcAddress(overrides: CallOverrides = {}): Promise
{\n return await this.contract.read.usdcAddress(overrides);\n }\n\n // Calculations Curve\n\n /**\n * Test if a token address is a curve liquidity provider token.\n * @param lpToken\n * @param overrides\n * @returns test result\n */\n async isCurveLpToken(lpToken: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.isCurveLpToken(lpToken, overrides);\n }\n\n /**\n * Get Usdc exchange rate for a curve liquidity provider token.\n * @param lpToken\n * @param overrides\n * @returns Usdc exchange rate (6 decimals)\n */\n async getCurvePriceUsdc(lpToken: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getCurvePriceUsdc(lpToken, overrides).then(int);\n }\n\n /**\n * Get Usdc exchange rate of underlying token of the curve liquidity provider\n * token's pool.\n * @param lpToken\n * @param overrides\n * @returns Usdc exchange rate (6 decimals)\n */\n async getBasePrice(lpToken: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getBasePrice(lpToken, overrides).then(int);\n }\n\n /**\n * Get virtual price for a curve liquidity provider token.\n * @param lpToken\n * @param overrides\n * @returns virtual price\n */\n async getVirtualPrice(lpToken: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getVirtualPrice(lpToken, overrides).then(int);\n }\n\n /**\n * Get the contract address that lens considers as Curve Registry.\n * @param overrides\n * @returns\n */\n async getCurveRegistryAddress(overrides: CallOverrides = {}): Promise {\n return await this.contract.read.usdcAddress(overrides).then(int);\n }\n\n // Calculations: Iron Bank\n\n /**\n * Test if a token address is an iron bank market.\n * @param token\n * @param overrides\n * @returns test result\n */\n async isIronBankMarket(token: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.isIronBankMarket(token, overrides);\n }\n\n /**\n * Get Usdc exchange rate for an iron bank market token.\n * @param token\n * @param overrides\n * @returns Usdc exchange rate (6 decimals)\n */\n async getIronBankMarketPriceUsdc(token: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getIronBankMarketPriceUsdc(token, overrides).then(int);\n }\n\n /**\n * Get all the iron bank market addresses.\n * @param overrides\n * @returns list of iron bank market addresses\n */\n async getIronBankMarkets(overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getIronBankMarkets(overrides);\n }\n\n // Calculations: Sushiswap\n\n /**\n * Test if a token address is a sushiswap liquidity provider token.\n * @param token\n * @param overrides\n * @returns test result\n */\n async isLpToken(token: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.isLpToken(token, overrides);\n }\n\n /**\n * Get exchange rate between two tokens from the sushiswap router.\n * @param token0\n * @param token1\n * @param overrides\n * @returns exchange rate\n */\n async getPriceFromRouter(token0: Address, token1: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getPriceFromRouter(token0, token1, overrides).then(int);\n }\n\n /**\n * Get Usdc exchange rate for a token.\n * @param token\n * @param overrides\n * @returns Usdc exchange rate (6 decimals)\n */\n async getPriceFromRouterUsdc(token: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getPriceFromRouterUsdc(token, overrides).then(int);\n }\n\n /**\n * Get total liquidity for a liquidity provider token in Usdc\n * @param token\n * @param overrides\n * @returns Usdc liquidity (6 decimals)\n */\n async getLpTokenTotalLiquidityUsdc(token: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getLpTokenTotalLiquidityUsdc(token, overrides).then(int);\n }\n\n /**\n * Get Usdc exchange rate for a sushiswap liquidity provider token.\n * @param token\n * @param overrides\n * @returns Usdc exchange rate (6 decimals)\n */\n async getLpTokenPriceUsdc(token: Address, overrides: CallOverrides = {}): Promise {\n return await this.contract.read.getLpTokenPriceUsdc(token, overrides).then(int);\n }\n}\n","import { ChainId } from \"../../chain\";\nimport { Service } from \"../../common\";\nimport { Context } from \"../../context\";\nimport { SdkError } from \"../../types\";\n\nexport class SubgraphService extends Service {\n yearnSubgraphEndpoint: string;\n\n constructor(chainId: ChainId, ctx: Context) {\n super(chainId, ctx);\n\n let subgraphName: string;\n switch (chainId) {\n case 1:\n case 1337:\n subgraphName = \"salazarguille/yearn-vaults-v2-subgraph-mainnet\";\n break;\n case 250:\n subgraphName = \"yearn/yearn-vaults-v2-fantom\";\n break;\n case 42161:\n subgraphName = \"yearn/yearn-vaults-v2-arbitrum\";\n break;\n default:\n throw new SdkError(`No subgraph name for chain ${chainId}`);\n }\n\n this.yearnSubgraphEndpoint = `https://api.thegraph.com/subgraphs/name/${subgraphName}`;\n }\n\n async fetchQuery(query: string, variables: { [key: string]: any } = {}): Promise {\n // the subgraph only works with lowercased addresses\n Object.keys(variables).forEach(key => {\n const variable = variables[key];\n if (typeof variable === \"string\") {\n variables[key] = variable.toLowerCase();\n } else if (Array.isArray(variable)) {\n for (const [index, value] of variable.entries()) {\n if (typeof value === \"string\") {\n variable[index] = value.toLowerCase();\n }\n }\n }\n });\n\n const body = {\n query: query,\n variables: variables\n };\n\n return await fetch(this.yearnSubgraphEndpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body)\n })\n .then(res => res.json())\n .then(json => {\n if (json.errors) {\n throw new SdkError(`Subgraph Error - ${JSON.stringify(json.errors)}`);\n }\n return json;\n });\n }\n}\n","import { Service } from \"../common\";\n\nexport class TelegramService extends Service {\n sendMessage(text: string) {\n if (!this.ctx.simulation.telegramChatId || !this.ctx.simulation.telegramBotId) {\n return;\n }\n const params = new URLSearchParams({\n chat_id: this.ctx.simulation.telegramChatId,\n text: text,\n disable_web_page_preview: \"true\"\n });\n const url = `https://api.telegram.org/bot${this.ctx.simulation.telegramBotId}/sendMessage?` + params;\n fetch(url);\n }\n}\n","import { Service } from \"../common\";\nimport { handleHttpError } from \"../helpers\";\nimport { Address, Apy, ApyMap, BackscracherApyComposite } from \"../types\";\n\n/**\n * Internal representation of a vault returned by the vaults.finance/all API.\n */\ninterface ApiVault {\n address: string;\n apy?: Apy;\n}\n\n/**\n * Fix for backscratcher vaults returning different casing and property names so it's all normalized.\n */\nexport function convertCompositeApyToSnakeCase(apy: Apy | undefined): Apy | undefined {\n return apy\n ? {\n ...apy,\n composite: apy.composite\n ? {\n ...apy.composite,\n boost: apy.composite.boost\n ? apy.composite.boost\n : ((apy.composite as unknown) as BackscracherApyComposite).currentBoost,\n pool_apy: apy.composite.pool_apy\n ? apy.composite.pool_apy\n : ((apy.composite as unknown) as BackscracherApyComposite).poolApy,\n boosted_apr: apy.composite.boosted_apr\n ? apy.composite.boosted_apr\n : ((apy.composite as unknown) as BackscracherApyComposite).boostedApy,\n base_apr: apy.composite.base_apr\n ? apy.composite.base_apr\n : ((apy.composite as unknown) as BackscracherApyComposite).baseApy\n }\n : null\n }\n : undefined;\n}\n\n/**\n * [[VisionService]] provides access to off chain apy calculations for yearn\n * products.\n */\nexport class VisionService extends Service {\n /**\n * Fetch APY from a list of yearn's vault addresses (or all of them is address\n * is not provided).\n * @param addresses\n */\n async apy(addresses?: T[]): Promise>;\n\n /**\n * Fetch API for a specific yearn's vault address.\n * @param addresses\n */\n async apy(address: Address): Promise;\n\n async apy(addresses?: T | T[]): Promise | Apy | undefined> {\n const url = `https://d28fcsszptni1s.cloudfront.net/v1/chains/${this.chainId}/vaults/all`;\n let vaults: ApiVault[] = await fetch(url)\n .then(handleHttpError)\n .then(res => res.json());\n\n // fix backscratcher apys\n vaults = vaults.map(vault =>\n vault.apy && vault.apy.type === \"backscratcher\"\n ? { ...vault, apy: convertCompositeApyToSnakeCase(vault.apy) }\n : vault\n );\n\n if (Array.isArray(addresses)) {\n const map = new Map();\n for (const address of addresses) {\n const vault = vaults.find(vault => vault.address === address);\n map.set(address, vault ? vault.apy : undefined);\n }\n return Object.fromEntries(map) as ApyMap;\n } else if (addresses) {\n const vault = vaults.find(vault => vault.address === addresses);\n if (!vault) return undefined;\n return vault.apy;\n } else {\n return Object.fromEntries(vaults.map(vault => [vault.address, vault.apy])) as ApyMap;\n }\n }\n}\n","/**\n * Supported chains in the yearn ecosystem.\n */\nexport const Chains = {\n 1: \"ethereum\",\n 250: \"fantom\",\n 1337: \"ethereum\",\n 42161: \"arbitrum\"\n};\n\nexport type EthMain = 1;\nexport type FtmMain = 250;\nexport type EthLocal = 1337;\nexport type ArbitrumOne = 42161;\n\nexport type ChainId = keyof typeof Chains;\n","import { getAddress } from \"@ethersproject/address\";\n\nimport { Chains } from \"../chain\";\nimport { Service } from \"../common\";\nimport { EthAddress, handleHttpError, usdc, ZeroAddress } from \"../helpers\";\nimport { Address, Balance, BalancesMap, Integer, Token } from \"../types\";\nimport {\n GasPrice,\n ZapApprovalStateOutput,\n ZapApprovalTransactionOutput,\n ZapOutput,\n ZapProtocol\n} from \"../types/custom/zapper\";\n\nconst ZAPPER_AFFILIATE_ADDRESS = \"0xFEB4acf3df3cDEA7399794D0869ef76A6EfAff52\";\n\n/**\n * [[ZapperService]] interacts with the zapper api to gather more insight for\n * tokens and user positions.\n */\nexport class ZapperService extends Service {\n /**\n * Fetch all the tokens supported by the zapper protocol along with some basic\n * metadata.\n * @returns list of tokens supported by the zapper protocol.\n */\n async supportedTokens(): Promise {\n const url = \"https://api.zapper.fi/v1/prices\";\n const params = new URLSearchParams({ api_key: this.ctx.zapper });\n const tokens = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n const network = Chains[this.chainId] ?? \"ethereum\";\n return tokens.map(\n (token: Record): Token => {\n const address = token.address === ZeroAddress ? EthAddress : getAddress(String(token.address));\n const supported = token.hide ? !token.hide : true;\n return {\n address: address,\n name: token.symbol,\n symbol: token.symbol,\n icon: `https://assets.yearn.network/tokens/${network}/${token.address}.png`,\n decimals: token.decimals,\n priceUsdc: usdc(token.price),\n supported: { zapper: supported }\n };\n }\n );\n }\n\n /**\n * Fetch token balances from the {@link ZapperService.supportedTokens} list\n * for a particular address.\n * @param address\n */\n async balances(address: T): Promise;\n\n /**\n * Fetch token balances from the {@link ZapperService.supportedTokens} list\n * for a list of addresses.\n * @param addresses\n */\n async balances(addresses: T[]): Promise>;\n async balances(addresses: T[] | T): Promise | Balance[]>;\n\n async balances(addresses: T[] | T): Promise | Balance[]> {\n const url = \"https://api.zapper.fi/v1/protocols/tokens/balances\";\n const params = new URLSearchParams({\n \"addresses[]\": Array.isArray(addresses) ? addresses.join() : addresses,\n api_key: this.ctx.zapper\n });\n const balances = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n Object.keys(balances).forEach(address => {\n const copy = balances[address];\n delete balances[address];\n if (copy.products.length === 0) {\n balances[getAddress(address)] = [];\n } else {\n const assets = copy.products[0].assets;\n balances[getAddress(address)] = assets.map(\n (balance: Record): Balance => {\n const address = balance.address === ZeroAddress ? EthAddress : getAddress(String(balance.address));\n return {\n address,\n token: {\n address,\n name: balance.symbol,\n symbol: balance.symbol,\n decimals: balance.decimals\n },\n balance: balance.balanceRaw,\n balanceUsdc: usdc(balance.balanceUSD),\n priceUsdc: usdc(balance.price)\n };\n }\n );\n }\n });\n if (!Array.isArray(addresses)) return balances[addresses];\n return balances;\n }\n\n /**\n * Fetch up to date gas prices in gwei\n * @returns gas prices\n */\n async gas(): Promise {\n const url = \"https://api.zapper.fi/v1/gas-price\";\n const params = new URLSearchParams({\n api_key: this.ctx.zapper\n });\n const gas = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n return gas;\n }\n\n /**\n * Fetches the data needed to check token ZapIn contract approval state\n * @param from - the address that is depositing\n * @param token - the token to be sold to pay for the deposit\n * @param zapProtocol the protocol to use with zapper e.g. Yearn, Pickle\n */\n async zapInApprovalState(\n from: Address,\n token: Address,\n zapProtocol: ZapProtocol = ZapProtocol.YEARN\n ): Promise {\n const url = `https://api.zapper.fi/v1/zap-in/vault/${zapProtocol}/approval-state`;\n const params = new URLSearchParams({\n ownerAddress: from,\n sellTokenAddress: token,\n api_key: this.ctx.zapper\n });\n const response: ZapApprovalStateOutput = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n\n return response;\n }\n\n /**\n * Fetches the data needed to approve ZapIn Contract for a token\n * @param from - the address that is depositing\n * @param token - the token to be sold to pay for the deposit\n * @param gasPrice\n * @param zapProtocol the protocol to use with zapper e.g. Yearn, Pickle\n */\n async zapInApprovalTransaction(\n from: Address,\n token: Address,\n gasPrice: Integer,\n zapProtocol: ZapProtocol = ZapProtocol.YEARN\n ): Promise {\n const url = `https://api.zapper.fi/v1/zap-in/vault/${zapProtocol}/approval-transaction`;\n const params = new URLSearchParams({\n gasPrice,\n ownerAddress: from,\n sellTokenAddress: token,\n api_key: this.ctx.zapper\n });\n const response: ZapApprovalTransactionOutput = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n\n return response;\n }\n\n /**\n * Fetches the data needed to check token ZapOut contract approval state\n * @param from - the address that is withdrawing\n * @param token - the vault token to be withdrawn\n * @param zapProtocol the protocol to use with zapper e.g. Yearn, Pickle\n */\n async zapOutApprovalState(\n from: Address,\n token: Address,\n zapProtocol: ZapProtocol = ZapProtocol.YEARN\n ): Promise {\n const url = `https://api.zapper.fi/v1/zap-out/vault/${zapProtocol}/approval-state`;\n const params = new URLSearchParams({\n ownerAddress: from,\n sellTokenAddress: token,\n api_key: this.ctx.zapper\n });\n const response: ZapApprovalStateOutput = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n\n return response;\n }\n\n /**\n * Fetches the data needed to approve ZapOut Contract for a token\n * @param from - the address that is withdrawing\n * @param token - the vault token to be withdrawn\n * @param gasPrice\n * @param zapProtocol the protocol to use with zapper e.g. Yearn, Pickle\n */\n async zapOutApprovalTransaction(\n from: Address,\n token: Address,\n gasPrice: Integer,\n zapProtocol: ZapProtocol = ZapProtocol.YEARN\n ): Promise {\n const url = `https://api.zapper.fi/v1/zap-out/vault/${zapProtocol}/approval-transaction`;\n const params = new URLSearchParams({\n gasPrice,\n ownerAddress: from,\n sellTokenAddress: token,\n api_key: this.ctx.zapper\n });\n const response: ZapApprovalTransactionOutput = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n\n return response;\n }\n\n /**\n * Fetches the data needed to zap into a vault\n * @param from - the address that is depositing\n * @param token - the token to be sold to pay for the deposit\n * @param amount - the amount of tokens to be sold\n * @param vault - the vault to zap into\n * @param gasPrice\n * @param slippagePercentage - slippage as a decimal\n * @param skipGasEstimate - provide the gasLimit in the response. Should be set to true when simulating a zap without approval\n * @param zapProtocol the protocol to use with zapper e.g. Yearn, Pickle\n */\n async zapIn(\n from: Address,\n token: Address,\n amount: Integer,\n vault: Address,\n gasPrice: Integer,\n slippagePercentage: number,\n skipGasEstimate: boolean,\n zapProtocol: ZapProtocol = ZapProtocol.YEARN\n ): Promise {\n let sellToken = token;\n if (EthAddress === token) {\n // If Ether is being sent, the sellTokenAddress should be the zero address\n sellToken = ZeroAddress;\n }\n\n const url = `https://api.zapper.fi/v1/zap-in/vault/${zapProtocol}/transaction`;\n const params = new URLSearchParams({\n affiliateAddress: ZAPPER_AFFILIATE_ADDRESS,\n ownerAddress: from,\n sellTokenAddress: sellToken,\n sellAmount: amount,\n poolAddress: vault,\n gasPrice: gasPrice,\n slippagePercentage: slippagePercentage.toString(),\n api_key: this.ctx.zapper,\n skipGasEstimate: skipGasEstimate ? \"true\" : \"false\"\n });\n\n const response: ZapOutput = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n\n return response;\n }\n\n /**\n * Fetches the data needed to zap out of a vault\n * @param from - the address that is withdrawing\n * @param token - the token that'll be received\n * @param amount - the amount of tokens to sell\n * @param vault - the vault to zap out of\n * @param gasPrice\n * @param slippagePercentage - slippage as a decimal\n * @param skipGasEstimate - provide the gasLimit in the response. Should be set to true when simulating a zap without approval\n * @param zapProtocol the protocol to use with zapper e.g. Yearn, Pickle\n * @param signature - the account valid secp256k1 signature of Permit encoded from r, s, v. (https://eips.ethereum.org/EIPS/eip-2612)\n */\n async zapOut(\n from: Address,\n token: Address,\n amount: Integer,\n vault: Address,\n gasPrice: Integer,\n slippagePercentage: number,\n skipGasEstimate: boolean,\n zapProtocol: ZapProtocol = ZapProtocol.YEARN,\n signature?: string\n ): Promise {\n let toToken = token;\n if (EthAddress === token) {\n // If Ether is being received, the toTokenAddress should be the zero address\n toToken = ZeroAddress;\n }\n\n const url = `https://api.zapper.fi/v1/zap-out/vault/${zapProtocol}/transaction`;\n const params = new URLSearchParams({\n affiliateAddress: ZAPPER_AFFILIATE_ADDRESS,\n ownerAddress: from,\n toTokenAddress: toToken,\n sellAmount: amount,\n poolAddress: vault,\n gasPrice: gasPrice,\n slippagePercentage: slippagePercentage.toString(),\n api_key: this.ctx.zapper,\n shouldSellEntireBalance: \"true\",\n skipGasEstimate: skipGasEstimate ? \"true\" : \"false\",\n ...(signature && { signature })\n });\n const response: ZapOutput = await fetch(`${url}?${params}`)\n .then(handleHttpError)\n .then(res => res.json());\n\n return response;\n }\n}\n","import { BytesLike } from \"@ethersproject/bytes\";\n\nimport { ChainId } from \"../chain\";\nimport { ContractService } from \"../common\";\nimport { Context } from \"../context\";\nimport { Address } from \"../types/common\";\n\n/**\n * [[AllowListService]] is used to interface with yearn's deployed AllowList contract. The purpose of it is to be able to\n * validate that all interactions that are about to be written to the blockchain follow the set of rules that the AllowList defines on chain.\n * It should be used to validate any transaction before it is written. For example, it can be used to check that an approval transaction that the sdk makes\n * is approving a token that is an underlying asset of a vault, and also that the first parameter in the approval transaction is the address of a valid yearn vault.\n * Similiarly, for a deposit transaction, it can be used to check whether the vault is a valid yearn vault\n */\nexport class AllowListService extends ContractService {\n static abi = [\n \"function validateCalldataByOrigin(string memory originName, address targetAddress, bytes calldata data) public view returns (bool)\"\n ];\n\n /**\n * This is used by the AllowListFactory to resolve which set of rules are applicable to which organization\n */\n private static originName = \"yearn.finance\";\n\n /**\n * Get most up-to-date address of the Allow List Factory contract for a particular chain id\n * @param chainId\n * @returns address\n */\n static addressByChain(chainId: ChainId): string | null {\n switch (chainId) {\n case 250:\n return \"0xD2322468e5Aa331381200754f6daAD3dF923539e\";\n case 1:\n case 1337:\n case 42161:\n default:\n return null;\n }\n }\n\n constructor(chainId: T, ctx: Context, address: string) {\n super(address, chainId, ctx);\n }\n\n /**\n * Uses yearn's on chain AllowList to verify whether the calldata being sent to the target contract by the sdk is valid. This should be used prior to any\n * write method, including token approvals. This method will raise an error if the parameters are not valid.\n * @param targetAddress The contract that is being interacted with e.g. for approving depositing usdc into a vault this would be usdc.\n * For depositing/withdrawing from a vault it'd be the vault contract itself\n * @param callData The data from the tx that should be validated. This should be from a tx that has been populated and is about to be sent\n */\n async validateCalldata(targetAddress?: Address, callData?: BytesLike): Promise<{ success: boolean; error?: string }> {\n if (!targetAddress) {\n return { success: false, error: \"can't validate a tx that isn't targeting an address\" };\n }\n\n if (!callData) {\n return { success: false, error: \"can't validate a tx that has no call data\" };\n }\n\n try {\n const valid = await this.contract.read.validateCalldataByOrigin(\n AllowListService.originName,\n targetAddress,\n callData\n );\n\n if (!valid) {\n return { success: false, error: \"tx is not permitted by the allow list\" };\n }\n\n return { success: true };\n } catch {\n return { success: false, error: \"failed to read from the allow list whether the transaction is valid\" };\n }\n }\n}\n","import { CallOverrides } from \"@ethersproject/contracts\";\n\nimport { AllowanceAbi, TokenAbi, TokenBalanceAbi, TokenPriceAbi } from \"../abi\";\nimport { ChainId } from \"../chain\";\nimport { ContractService } from \"../common\";\nimport { Context } from \"../context\";\nimport { chunkArray } from \"../helpers\";\nimport { structArray } from \"../struct\";\nimport { Address, ERC20, TokenAllowance, TokenBalance, TokenPrice } from \"../types\";\n\nconst HelperAbi = [\n `function tokensMetadata(address[] memory) public view returns (${TokenAbi}[] memory)`,\n `function tokensPrices(address[] memory) public view returns (${TokenPriceAbi}[] memory)`,\n `function tokensBalances(address, address[] memory) public view returns (${TokenBalanceAbi}[] memory)`,\n `function allowances(address, address[] memory, address[] memory) external view returns (${AllowanceAbi}[] memory)`,\n \"function assetStrategiesAddresses(address) public view returns (address[])\"\n];\n\n/**\n * [[HelperService]] is a generalized containers for all the utilities that are\n * used in the lens codebase and in the SDK.\n */\nexport class HelperService extends ContractService {\n static abi = HelperAbi;\n\n constructor(chainId: T, ctx: Context) {\n super(ctx.addresses.helper ?? HelperService.addressByChain(chainId), chainId, ctx);\n }\n\n /**\n * Get most up-to-date address of the Helper contract for a particular chain\n * id.\n * @param chainId\n * @returns address\n */\n static addressByChain(chainId: ChainId): string {\n switch (chainId) {\n case 1:\n case 1337:\n return \"0x5AACD0D03096039aC4381CD814637e9FB7C34a6f\";\n case 250:\n return \"0xE55Dd55b3355c261A048B3f310706C7478657d74\";\n case 42161:\n return \"0xE55Dd55b3355c261A048B3f310706C7478657d74\";\n }\n }\n\n /**\n * Get a list of [[ERC20]] objects for a list of token addresses.\n * @param addresses\n * @param overrides\n * @returns list of erc20 object\n */\n async tokens(addresses: Address[], overrides: CallOverrides = {}): Promise {\n return await this.contract.read.tokensMetadata(addresses, overrides).then(structArray);\n }\n\n /**\n * Get a list of token prices for a list of token addresses.\n * @param addresses\n * @param overrides\n * @returns list of token prices\n */\n async tokenPrices(addresses: Address[], overrides: CallOverrides = {}): Promise {\n return await this.contract.read.tokensPrices(addresses, overrides).then(structArray);\n }\n\n /**\n * Get a list of token balances from a list of token addresses for a\n * particular address.\n * @param address\n * @param tokens\n * @param overrides\n * @returns list of token balances\n */\n async tokenBalances(address: Address, tokens: Address[], overrides: CallOverrides = {}): Promise {\n const chunks = chunkArray(tokens, 30);\n const promises = chunks.map(async chunk =>\n this.contract.read.tokensBalances(address, chunk, overrides).then(structArray)\n );\n return Promise.all(promises).then(chunks => chunks.flat());\n }\n\n /**\n * Get a list of token allowances for a list of token addresses and spenders\n * for a particular address.\n * @param address\n * @param tokens\n * @param spenders\n * @param overrides\n * @returns\n */\n async tokenAllowances(\n address: Address,\n tokens: Address[],\n spenders: Address[],\n overrides: CallOverrides = {}\n ): Promise {\n return await this.contract.read.allowances(address, tokens, spenders, overrides).then(structArray);\n }\n\n async assetStrategiesAddresses(address: Address, overrides: CallOverrides = {}): Promise {\n return this.contract.read.assetStrategiesAddresses(address, overrides);\n }\n}\n","import { Service } from \"../common\";\nimport { StrategiesMetadata, TokenMetadata, VaultMetadataOverrides } from \"../types\";\n\nconst MetaURL = \"https://meta.yearn.network\";\n\nconst CHAIN_ID_KEY = \"{chain_id}\";\n\n/**\n * [[MetaService]] fetches meta data about things such as vaults and tokens\n * from yearn-meta\n */\nexport class MetaService extends Service {\n async tokens(): Promise {\n return fetch(this.buildUrl(`tokens/${CHAIN_ID_KEY}/all`)).then(res => res.json());\n }\n\n async strategies(): Promise {\n return fetch(this.buildUrl(`strategies/${CHAIN_ID_KEY}/all`)).then(res => res.json());\n }\n\n async vaults(): Promise {\n return fetch(this.buildUrl(`vaults/${CHAIN_ID_KEY}/all`)).then(res => res.json());\n }\n\n private buildUrl(path: string): string {\n return `${MetaURL}/${path}`.replace(CHAIN_ID_KEY, this.chainId.toString());\n }\n}\n","import { Deferrable } from \"@ethersproject/properties\";\nimport { TransactionRequest, TransactionResponse } from \"@ethersproject/providers\";\n\nimport { ChainId } from \"../chain\";\nimport { Service } from \"../common\";\nimport { Context } from \"../context\";\nimport { SdkError } from \"../types/common\";\nimport { AllowListService } from \"./allowlist\";\n\nexport class TransactionService extends Service {\n private allowListService?: AllowListService;\n\n constructor(chainId: T, ctx: Context, allowListService?: AllowListService) {\n super(chainId, ctx);\n this.allowListService = allowListService;\n }\n\n async sendTransaction(transaction: Deferrable): Promise {\n const { success, error } = await this.validateTx(transaction);\n if (!success) {\n throw new SdkError(error || \"transaction is not valid\");\n }\n const signer = this.ctx.provider.write.getSigner();\n return signer.sendTransaction(transaction);\n }\n\n private async validateTx(transaction: Deferrable): Promise<{ success: boolean; error?: string }> {\n if (!this.allowListService) {\n return Promise.resolve({ success: true, error: undefined });\n }\n\n const [to, data] = await Promise.all([transaction.to, transaction.data]);\n return await this.allowListService.validateCalldata(to, data);\n }\n}\n","import { ChainId } from \"./chain\";\nimport { Context, ContextValue } from \"./context\";\nimport { EarningsInterface } from \"./interfaces/earnings\";\nimport { FeesInterface } from \"./interfaces/fees\";\nimport { IronBankInterface } from \"./interfaces/ironbank\";\nimport { SimulationInterface } from \"./interfaces/simulation\";\nimport { StrategyInterface } from \"./interfaces/strategy\";\nimport { TokenInterface } from \"./interfaces/token\";\nimport { VaultInterface } from \"./interfaces/vault\";\nimport { AllowListService } from \"./services/allowlist\";\nimport { AssetService } from \"./services/assets\";\nimport { HelperService } from \"./services/helper\";\nimport { LensService } from \"./services/lens\";\nimport { MetaService } from \"./services/meta\";\nimport { OracleService } from \"./services/oracle\";\nimport { PickleService } from \"./services/partners/pickle\";\nimport { SubgraphService } from \"./services/subgraph\";\nimport { TelegramService } from \"./services/telegram\";\nimport { TransactionService } from \"./services/transaction\";\nimport { VisionService } from \"./services/vision\";\nimport { ZapperService } from \"./services/zapper\";\nimport { AssetServiceState } from \"./types/custom/assets\";\n\n/**\n * [[Yearn]] is a wrapper for all the services and interfaces of the SDK.\n *\n * Yearn namespace can be instantiated as a class, providing configuration\n * options that will then be used by all the services and interfaces:\n *\n * ```typescript\n * import { Yearn } from \"@yfi/sdk\";\n *\n * const provider = new JsonRpcProvider(\"http://localhost:8545\");\n * const yearn = new Yearn(1, { provider });\n * ```\n */\nexport class Yearn {\n services: {\n lens: LensService;\n oracle: OracleService;\n zapper: ZapperService;\n asset: AssetService;\n vision: VisionService;\n subgraph: SubgraphService;\n telegram: TelegramService;\n meta: MetaService;\n allowList?: AllowListService;\n transaction: TransactionService;\n\n pickle: PickleService;\n\n helper: HelperService;\n };\n\n vaults: VaultInterface;\n tokens: TokenInterface;\n earnings: EarningsInterface;\n fees: FeesInterface;\n ironBank: IronBankInterface;\n simulation: SimulationInterface;\n strategies: StrategyInterface;\n\n context: Context;\n\n /**\n * This promise can be **optionally** awaited to assure that all services\n * have been correctly loaded.\n *\n * ```typescript\n * const yearn = new Yearn(1, { provider });\n * await yearn.ready;\n * ```\n */\n ready: Promise;\n\n /**\n * Create a new SDK instance.\n * @param chainId\n * @param context plain object containing all the optional configuration\n * @param assetServiceState the asset service does some expensive computation at initialization, passing the state from a previous sdk instance can prevent this\n */\n constructor(chainId: T, context: ContextValue, assetServiceState?: AssetServiceState) {\n this.context = new Context(context);\n\n const allowlistAddress = AllowListService.addressByChain(chainId);\n const allowListService = allowlistAddress\n ? new AllowListService(chainId, this.context, allowlistAddress)\n : undefined;\n\n this.services = {\n lens: new LensService(chainId, this.context),\n oracle: new OracleService(chainId, this.context),\n zapper: new ZapperService(chainId, this.context),\n asset: new AssetService(chainId, this.context, assetServiceState),\n vision: new VisionService(chainId, this.context),\n subgraph: new SubgraphService(chainId, this.context),\n pickle: new PickleService(chainId, this.context),\n helper: new HelperService(chainId, this.context),\n telegram: new TelegramService(chainId, this.context),\n meta: new MetaService(chainId, this.context),\n allowList: allowListService,\n transaction: new TransactionService(chainId, this.context, allowListService)\n };\n\n this.vaults = new VaultInterface(this, chainId, this.context);\n this.tokens = new TokenInterface(this, chainId, this.context);\n this.earnings = new EarningsInterface(this, chainId, this.context);\n this.fees = new FeesInterface(this, chainId, this.context);\n this.ironBank = new IronBankInterface(this, chainId, this.context);\n this.simulation = new SimulationInterface(this, chainId, this.context);\n this.strategies = new StrategyInterface(this, chainId, this.context);\n\n this.ready = Promise.all([this.services.asset.ready]);\n }\n\n setChainId(chainId: ChainId) {\n const allowlistAddress = AllowListService.addressByChain(chainId);\n const allowListService = allowlistAddress\n ? new AllowListService(chainId, this.context, allowlistAddress)\n : undefined;\n\n this.services = {\n lens: new LensService(chainId, this.context),\n oracle: new OracleService(chainId, this.context),\n zapper: new ZapperService(chainId, this.context),\n asset: new AssetService(chainId, this.context),\n vision: new VisionService(chainId, this.context),\n subgraph: new SubgraphService(chainId, this.context),\n pickle: new PickleService(chainId, this.context),\n helper: new HelperService(chainId, this.context),\n telegram: new TelegramService(chainId, this.context),\n meta: new MetaService(chainId, this.context),\n allowList: allowListService,\n transaction: new TransactionService(chainId, this.context, allowListService)\n };\n\n this.vaults = new VaultInterface(this, chainId, this.context);\n this.tokens = new TokenInterface(this, chainId, this.context);\n this.earnings = new EarningsInterface(this, chainId, this.context);\n this.fees = new FeesInterface(this, chainId, this.context);\n this.ironBank = new IronBankInterface(this, chainId, this.context);\n this.simulation = new SimulationInterface(this, chainId, this.context);\n this.strategies = new StrategyInterface(this, chainId, this.context);\n\n this.ready = Promise.all([this.services.asset.ready]);\n }\n}\n",";(function (globalObject) {\r\n 'use strict';\r\n\r\n/*\r\n * bignumber.js v9.0.1\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2020 Michael Mclaughlin \r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\n var BigNumber,\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n /*\r\n * Create and return a BigNumber constructor.\r\n */\r\n function clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if less than two characters,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, P.lt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, P.gt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // THe index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne;\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n function maxOrMin(args, method) {\r\n var n,\r\n i = 1,\r\n m = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n n = new BigNumber(args[i]);\r\n\r\n // If any number is NaN, return NaN.\r\n if (!n.s) {\r\n m = n;\r\n break;\r\n } else if (method.call(m, n)) {\r\n m = n;\r\n }\r\n }\r\n\r\n return m;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = n / pows10[d - j - 1] % 10 | 0;\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) t = yc, yc = xc, xc = t, b = a;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n }\r\n\r\n\r\n // PRIVATE HELPER FUNCTIONS\r\n\r\n // These functions don't need access to variables,\r\n // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\n function bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n }\r\n\r\n\r\n // Return a coefficient array as a string of base 10 digits.\r\n function coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n }\r\n\r\n\r\n // Compare the value of BigNumbers x and y.\r\n function compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n }\r\n\r\n\r\n /*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\n function intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n }\r\n\r\n\r\n // Assumes finite n.\r\n function isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n }\r\n\r\n\r\n function toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n }\r\n\r\n\r\n function toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n\r\n // EXPORT\r\n\r\n\r\n BigNumber = clone();\r\n BigNumber['default'] = BigNumber.BigNumber = BigNumber;\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () { return BigNumber; });\r\n\r\n // Node.js and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = BigNumber;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalObject) {\r\n globalObject = typeof self != 'undefined' && self ? self : window;\r\n }\r\n\r\n globalObject.BigNumber = BigNumber;\r\n }\r\n})(this);\r\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n/**\n * Custom errors.\n *\n * @private\n */\nvar ValidationError = /*#__PURE__*/function (_Error) {\n _inherits(ValidationError, _Error);\n\n var _super = _createSuper(ValidationError);\n\n function ValidationError(message, path) {\n var _this;\n\n _classCallCheck(this, ValidationError);\n\n _this = _super.call(this, message);\n defineProp(_assertThisInitialized(_this), 'path', path);\n defineProp(_assertThisInitialized(_this), 'expose', true);\n defineProp(_assertThisInitialized(_this), 'status', 400);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_assertThisInitialized(_this), ValidationError);\n }\n\n return _this;\n }\n\n return _createClass(ValidationError);\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nexports[\"default\"] = ValidationError;\n\nvar defineProp = function defineProp(obj, prop, val) {\n Object.defineProperty(obj, prop, {\n enumerable: false,\n configurable: true,\n writable: true,\n value: val\n });\n};\n\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\n/**\n * Default error messages.\n *\n * @private\n */\nvar Messages = {\n // Type message\n type: function type(prop, ctx, _type) {\n if (typeof _type == 'function') {\n _type = _type.name;\n }\n\n return \"\".concat(prop, \" must be of type \").concat(_type, \".\");\n },\n // Required message\n required: function required(prop) {\n return \"\".concat(prop, \" is required.\");\n },\n // Match message\n match: function match(prop, ctx, regexp) {\n return \"\".concat(prop, \" must match \").concat(regexp, \".\");\n },\n // Length message\n length: function length(prop, ctx, len) {\n if (typeof len == 'number') {\n return \"\".concat(prop, \" must have a length of \").concat(len, \".\");\n }\n\n var min = len.min,\n max = len.max;\n\n if (min && max) {\n return \"\".concat(prop, \" must have a length between \").concat(min, \" and \").concat(max, \".\");\n }\n\n if (max) {\n return \"\".concat(prop, \" must have a maximum length of \").concat(max, \".\");\n }\n\n if (min) {\n return \"\".concat(prop, \" must have a minimum length of \").concat(min, \".\");\n }\n },\n // Size message\n size: function size(prop, ctx, _size) {\n if (typeof _size == 'number') {\n return \"\".concat(prop, \" must have a size of \").concat(_size, \".\");\n }\n\n var min = _size.min,\n max = _size.max;\n\n if (min !== undefined && max !== undefined) {\n return \"\".concat(prop, \" must be between \").concat(min, \" and \").concat(max, \".\");\n }\n\n if (max !== undefined) {\n return \"\".concat(prop, \" must be less than \").concat(max, \".\");\n }\n\n if (min !== undefined) {\n return \"\".concat(prop, \" must be greater than \").concat(min, \".\");\n }\n },\n // Enum message\n \"enum\": function _enum(prop, ctx, enums) {\n var copy = enums.slice();\n var last = copy.pop();\n return \"\".concat(prop, \" must be either \").concat(copy.join(', '), \" or \").concat(last, \".\");\n },\n // Illegal property\n illegal: function illegal(prop) {\n return \"\".concat(prop, \" is not allowed.\");\n },\n // Default message\n \"default\": function _default(prop) {\n return \"Validation failed for \".concat(prop, \".\");\n }\n};\nvar _default2 = Messages;\nexports[\"default\"] = _default2;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _error2 = _interopRequireDefault(require(\"./error\"));\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * A property instance gets returned whenever you call `schema.path()`.\n * Properties are also created internally when an object is passed to the Schema constructor.\n *\n * @param {String} name - the name of the property\n * @param {Schema} schema - parent schema\n */\nvar Property = /*#__PURE__*/function () {\n function Property(name, schema) {\n _classCallCheck(this, Property);\n\n this.name = name;\n this.registry = {};\n this._schema = schema;\n this._type = null;\n this.messages = {};\n }\n /**\n * Registers messages.\n *\n * @example\n * prop.message('something is wrong')\n * prop.message({ required: 'thing is required.' })\n *\n * @param {Object|String} messages\n * @return {Property}\n */\n\n\n _createClass(Property, [{\n key: \"message\",\n value: function message(messages) {\n if (typeof messages == 'string') {\n messages = {\n \"default\": messages\n };\n }\n\n var entries = Object.entries(messages);\n\n for (var _i = 0, _entries = entries; _i < _entries.length; _i++) {\n var _entries$_i = _slicedToArray(_entries[_i], 2),\n key = _entries$_i[0],\n val = _entries$_i[1];\n\n this.messages[key] = val;\n }\n\n return this;\n }\n /**\n * Mount given `schema` on current path.\n *\n * @example\n * const user = new Schema({ email: String })\n * prop.schema(user)\n *\n * @param {Schema} schema - the schema to mount\n * @return {Property}\n */\n\n }, {\n key: \"schema\",\n value: function schema(_schema) {\n this._schema.path(this.name, _schema);\n\n return this;\n }\n /**\n * Validate using named functions from the given object.\n * Error messages can be defined by providing an object with\n * named error messages/generators to `schema.message()`\n *\n * The message generator receives the value being validated,\n * the object it belongs to and any additional arguments.\n *\n * @example\n * const schema = new Schema()\n * const prop = schema.path('some.path')\n *\n * schema.message({\n * binary: (path, ctx) => `${path} must be binary.`,\n * bits: (path, ctx, bits) => `${path} must be ${bits}-bit`\n * })\n *\n * prop.use({\n * binary: (val, ctx) => /^[01]+$/i.test(val),\n * bits: [(val, ctx, bits) => val.length == bits, 32]\n * })\n *\n * @param {Object} fns - object with named validation functions to call\n * @return {Property}\n */\n\n }, {\n key: \"use\",\n value: function use(fns) {\n var _this = this;\n\n Object.keys(fns).forEach(function (name) {\n var arr = fns[name];\n if (!Array.isArray(arr)) arr = [arr];\n var fn = arr.shift();\n\n _this._register(name, arr, fn);\n });\n return this;\n }\n /**\n * Registers a validator that checks for presence.\n *\n * @example\n * prop.required()\n *\n * @param {Boolean} [bool] - `true` if required, `false` otherwise\n * @return {Property}\n */\n\n }, {\n key: \"required\",\n value: function required() {\n var bool = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n return this._register('required', [bool]);\n }\n /**\n * Registers a validator that checks if a value is of a given `type`\n *\n * @example\n * prop.type(String)\n *\n * @example\n * prop.type('string')\n *\n * @param {String|Function} type - type to check for\n * @return {Property}\n */\n\n }, {\n key: \"type\",\n value: function type(_type) {\n this._type = _type;\n return this._register('type', [_type]);\n }\n /**\n * Convenience method for setting type to `String`\n *\n * @example\n * prop.string()\n *\n * @return {Property}\n */\n\n }, {\n key: \"string\",\n value: function string() {\n return this.type(String);\n }\n /**\n * Convenience method for setting type to `Number`\n *\n * @example\n * prop.number()\n *\n * @return {Property}\n */\n\n }, {\n key: \"number\",\n value: function number() {\n return this.type(Number);\n }\n /**\n * Convenience method for setting type to `Array`\n *\n * @example\n * prop.array()\n *\n * @return {Property}\n */\n\n }, {\n key: \"array\",\n value: function array() {\n return this.type(Array);\n }\n /**\n * Convenience method for setting type to `Date`\n *\n * @example\n * prop.date()\n *\n * @return {Property}\n */\n\n }, {\n key: \"date\",\n value: function date() {\n return this.type(Date);\n }\n /**\n * Registers a validator that checks length.\n *\n * @example\n * prop.length({ min: 8, max: 255 })\n * prop.length(10)\n *\n * @param {Object|Number} rules - object with `.min` and `.max` properties or a number\n * @param {Number} rules.min - minimum length\n * @param {Number} rules.max - maximum length\n * @return {Property}\n */\n\n }, {\n key: \"length\",\n value: function length(rules) {\n return this._register('length', [rules]);\n }\n /**\n * Registers a validator that checks size.\n *\n * @example\n * prop.size({ min: 8, max: 255 })\n * prop.size(10)\n *\n * @param {Object|Number} rules - object with `.min` and `.max` properties or a number\n * @param {Number} rules.min - minimum size\n * @param {Number} rules.max - maximum size\n * @return {Property}\n */\n\n }, {\n key: \"size\",\n value: function size(rules) {\n return this._register('size', [rules]);\n }\n /**\n * Registers a validator for enums.\n *\n * @example\n * prop.enum(['cat', 'dog'])\n *\n * @param {Array} rules - allowed values\n * @return {Property}\n */\n\n }, {\n key: \"enum\",\n value: function _enum(enums) {\n return this._register('enum', [enums]);\n }\n /**\n * Registers a validator that checks if a value matches given `regexp`.\n *\n * @example\n * prop.match(/some\\sregular\\sexpression/)\n *\n * @param {RegExp} regexp - regular expression to match\n * @return {Property}\n */\n\n }, {\n key: \"match\",\n value: function match(regexp) {\n return this._register('match', [regexp]);\n }\n /**\n * Registers a validator that checks each value in an array against given `rules`.\n *\n * @example\n * prop.each({ type: String })\n * prop.each([{ type: Number }])\n * prop.each({ things: [{ type: String }]})\n * prop.each(schema)\n *\n * @param {Array|Object|Schema|Property} rules - rules to use\n * @return {Property}\n */\n\n }, {\n key: \"each\",\n value: function each(rules) {\n this._schema.path((0, _utils.join)('$', this.name), rules);\n\n return this;\n }\n /**\n * Registers paths for array elements on the parent schema, with given array of rules.\n *\n * @example\n * prop.elements([{ type: String }, { type: Number }])\n *\n * @param {Array} arr - array of rules to use\n * @return {Property}\n */\n\n }, {\n key: \"elements\",\n value: function elements(arr) {\n var _this2 = this;\n\n arr.forEach(function (rules, i) {\n _this2._schema.path((0, _utils.join)(i, _this2.name), rules);\n });\n return this;\n }\n /**\n * Registers all properties from the given object as nested properties\n *\n * @example\n * prop.properties({\n * name: String,\n * email: String\n * })\n *\n * @param {Object} props - properties with rules\n * @return {Property}\n */\n\n }, {\n key: \"properties\",\n value: function properties(props) {\n for (var _i2 = 0, _Object$entries = Object.entries(props); _i2 < _Object$entries.length; _i2++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),\n prop = _Object$entries$_i[0],\n rule = _Object$entries$_i[1];\n\n this._schema.path((0, _utils.join)(prop, this.name), rule);\n }\n\n return this;\n }\n /**\n * Proxy method for schema path. Makes chaining properties together easier.\n *\n * @example\n * schema\n * .path('name').type(String).required()\n * .path('email').type(String).required()\n *\n */\n\n }, {\n key: \"path\",\n value: function path() {\n var _this$_schema;\n\n return (_this$_schema = this._schema).path.apply(_this$_schema, arguments);\n }\n /**\n * Typecast given `value`\n *\n * @example\n * prop.type(String)\n * prop.typecast(123) // => '123'\n *\n * @param {Mixed} value - value to typecast\n * @return {Mixed}\n */\n\n }, {\n key: \"typecast\",\n value: function typecast(value) {\n var schema = this._schema;\n var type = this._type;\n if (!type) return value;\n\n if (typeof type == 'function') {\n type = type.name;\n }\n\n var cast = schema.typecasters[type] || schema.typecasters[type.toLowerCase()];\n\n if (typeof cast != 'function') {\n throw new Error(\"Typecasting failed: No typecaster defined for \".concat(type, \".\"));\n }\n\n return cast(value);\n }\n /**\n * Validate given `value`\n *\n * @example\n * prop.type(Number)\n * assert(prop.validate(2) == null)\n * assert(prop.validate('hello world') instanceof Error)\n *\n * @param {Mixed} value - value to validate\n * @param {Object} ctx - the object containing the value\n * @param {String} [path] - path of the value being validated\n * @return {ValidationError}\n */\n\n }, {\n key: \"validate\",\n value: function validate(value, ctx) {\n var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.name;\n var types = Object.keys(this.registry);\n\n for (var _i3 = 0, _types = types; _i3 < _types.length; _i3++) {\n var type = _types[_i3];\n\n var err = this._run(type, value, ctx, path);\n\n if (err) return err;\n }\n\n return null;\n }\n /**\n * Run validator of given `type`\n *\n * @param {String} type - type of validator\n * @param {Mixed} value - value to validate\n * @param {Object} ctx - the object containing the value\n * @param {String} path - path of the value being validated\n * @return {ValidationError}\n * @private\n */\n\n }, {\n key: \"_run\",\n value: function _run(type, value, ctx, path) {\n if (!this.registry[type]) return;\n var schema = this._schema;\n var _this$registry$type = this.registry[type],\n args = _this$registry$type.args,\n fn = _this$registry$type.fn;\n var validator = fn || schema.validators[type];\n var valid = validator.apply(void 0, [value, ctx].concat(_toConsumableArray(args), [path]));\n if (!valid) return this._error(type, ctx, args, path);\n }\n /**\n * Register validator\n *\n * @param {String} type - type of validator\n * @param {Array} args - argument to pass to validator\n * @param {Function} [fn] - custom validation function to call\n * @return {Property}\n * @private\n */\n\n }, {\n key: \"_register\",\n value: function _register(type, args, fn) {\n this.registry[type] = {\n args: args,\n fn: fn\n };\n return this;\n }\n /**\n * Create an error\n *\n * @param {String} type - type of validator\n * @param {Object} ctx - the object containing the value\n * @param {Array} args - arguments to pass\n * @param {String} path - path of the value being validated\n * @return {ValidationError}\n * @private\n */\n\n }, {\n key: \"_error\",\n value: function _error(type, ctx, args, path) {\n var schema = this._schema;\n var message = this.messages[type] || this.messages[\"default\"] || schema.messages[type] || schema.messages[\"default\"];\n\n if (typeof message == 'function') {\n message = message.apply(void 0, [path, ctx].concat(_toConsumableArray(args)));\n }\n\n return new _error2[\"default\"](message, path);\n }\n }]);\n\n return Property;\n}();\n\nexports[\"default\"] = Property;\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _dot = _interopRequireDefault(require(\"@eivifj/dot\"));\n\nvar _typecast = _interopRequireDefault(require(\"typecast\"));\n\nvar _property = _interopRequireDefault(require(\"./property\"));\n\nvar _messages = _interopRequireDefault(require(\"./messages\"));\n\nvar _validators = _interopRequireDefault(require(\"./validators\"));\n\nvar _error = _interopRequireDefault(require(\"./error\"));\n\nvar _utils = require(\"./utils\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/**\n * A Schema defines the structure that objects should be validated against.\n *\n * @example\n * const post = new Schema({\n * title: {\n * type: String,\n * required: true,\n * length: { min: 1, max: 255 }\n * },\n * content: {\n * type: String,\n * required: true\n * },\n * published: {\n * type: Date,\n * required: true\n * },\n * keywords: [{ type: String }]\n * })\n *\n * @example\n * const author = new Schema({\n * name: {\n * type: String,\n * required: true\n * },\n * email: {\n * type: String,\n * required: true\n * },\n * posts: [post]\n * })\n *\n * @param {Object} [obj] - schema definition\n * @param {Object} [opts] - options\n * @param {Boolean} [opts.typecast=false] - typecast values before validation\n * @param {Boolean} [opts.strip=true] - strip properties not defined in the schema\n * @param {Boolean} [opts.strict=false] - validation fails when object contains properties not defined in the schema\n */\nvar Schema = /*#__PURE__*/function () {\n function Schema() {\n var _this = this;\n\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, Schema);\n\n this.opts = opts;\n this.hooks = [];\n this.props = {};\n this.messages = Object.assign({}, _messages[\"default\"]);\n this.validators = Object.assign({}, _validators[\"default\"]);\n this.typecasters = Object.assign({}, _typecast[\"default\"]);\n Object.keys(obj).forEach(function (k) {\n return _this.path(k, obj[k]);\n });\n }\n /**\n * Create or update `path` with given `rules`.\n *\n * @example\n * const schema = new Schema()\n * schema.path('name.first', { type: String })\n * schema.path('name.last').type(String).required()\n *\n * @param {String} path - full path using dot-notation\n * @param {Object|Array|String|Schema|Property} [rules] - rules to apply\n * @return {Property}\n */\n\n\n _createClass(Schema, [{\n key: \"path\",\n value: function path(_path, rules) {\n var _this2 = this;\n\n var parts = _path.split('.');\n\n var suffix = parts.pop();\n var prefix = parts.join('.'); // Make sure full path is created\n\n if (prefix) {\n this.path(prefix);\n } // Array index placeholder\n\n\n if (suffix === '$') {\n this.path(prefix).type(Array);\n } // Nested schema\n\n\n if (rules instanceof Schema) {\n rules.hook(function (k, v) {\n return _this2.path((0, _utils.join)(k, _path), v);\n });\n return this.path(_path, rules.props);\n } // Return early when given a `Property`\n\n\n if (rules instanceof _property[\"default\"]) {\n this.props[_path] = rules; // Notify parents if mounted\n\n this.propagate(_path, rules);\n return rules;\n }\n\n var prop = this.props[_path] || new _property[\"default\"](_path, this);\n this.props[_path] = prop; // Notify parents if mounted\n\n this.propagate(_path, prop); // No rules?\n\n if (!rules) return prop; // type shorthand\n // `{ name: String }`\n\n if (typeof rules == 'string' || typeof rules == 'function') {\n prop.type(rules);\n return prop;\n } // Allow arrays to be defined implicitly:\n // `{ keywords: [String] }`\n // `{ keyVal: [[String, Number]] }`\n\n\n if (Array.isArray(rules)) {\n prop.type(Array);\n\n if (rules.length === 1) {\n prop.each(rules[0]);\n } else {\n prop.elements(rules);\n }\n\n return prop;\n }\n\n var keys = Object.keys(rules);\n var nested = false; // Check for nested objects\n\n for (var _i = 0, _keys = keys; _i < _keys.length; _i++) {\n var key = _keys[_i];\n if (typeof prop[key] == 'function') continue;\n prop.type(Object);\n nested = true;\n break;\n }\n\n keys.forEach(function (key) {\n var rule = rules[key];\n\n if (nested) {\n return _this2.path((0, _utils.join)(key, _path), rule);\n }\n\n prop[key](rule);\n });\n return prop;\n }\n /**\n * Typecast given `obj`.\n *\n * @param {Object} obj - the object to typecast\n * @return {Schema}\n * @private\n */\n\n }, {\n key: \"typecast\",\n value: function typecast(obj) {\n var _loop = function _loop() {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),\n path = _Object$entries$_i[0],\n prop = _Object$entries$_i[1];\n\n (0, _utils.enumerate)(path, obj, function (key, value) {\n if (value == null) return;\n var cast = prop.typecast(value);\n if (cast === value) return;\n\n _dot[\"default\"].set(obj, key, cast);\n });\n };\n\n for (var _i2 = 0, _Object$entries = Object.entries(this.props); _i2 < _Object$entries.length; _i2++) {\n _loop();\n }\n\n return this;\n }\n /**\n * Strip all keys not defined in the schema\n *\n * @param {Object} obj - the object to strip\n * @param {String} [prefix]\n * @return {Schema}\n * @private\n */\n\n }, {\n key: \"strip\",\n value: function strip(obj) {\n var _this3 = this;\n\n (0, _utils.walk)(obj, function (path, prop) {\n if (_this3.props[prop]) return true;\n\n _dot[\"default\"][\"delete\"](obj, path);\n\n return false;\n });\n return this;\n }\n /**\n * Create errors for all properties that are not defined in the schema\n *\n * @param {Object} obj - the object to check\n * @return {Schema}\n * @private\n */\n\n }, {\n key: \"enforce\",\n value: function enforce(obj) {\n var _this4 = this;\n\n var errors = [];\n (0, _utils.walk)(obj, function (path, prop) {\n if (_this4.props[prop]) return true;\n var error = new _error[\"default\"](_messages[\"default\"].illegal(path), path);\n errors.push(error);\n return false;\n });\n return errors;\n }\n /**\n * Validate given `obj`.\n *\n * @example\n * const schema = new Schema({ name: { required: true }})\n * const errors = schema.validate({})\n * assert(errors.length == 1)\n * assert(errors[0].message == 'name is required')\n * assert(errors[0].path == 'name')\n *\n * @param {Object} obj - the object to validate\n * @param {Object} [opts] - options, see [Schema](#schema-1)\n * @return {Array}\n */\n\n }, {\n key: \"validate\",\n value: function validate(obj) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n opts = Object.assign(this.opts, opts);\n var errors = [];\n\n if (opts.typecast) {\n this.typecast(obj);\n }\n\n if (opts.strict) {\n errors.push.apply(errors, _toConsumableArray(this.enforce(obj)));\n }\n\n if (opts.strip !== false) {\n this.strip(obj);\n }\n\n var _loop2 = function _loop2() {\n var _Object$entries2$_i = _slicedToArray(_Object$entries2[_i3], 2),\n path = _Object$entries2$_i[0],\n prop = _Object$entries2$_i[1];\n\n (0, _utils.enumerate)(path, obj, function (key, value) {\n var err = prop.validate(value, obj, key);\n if (err) errors.push(err);\n });\n };\n\n for (var _i3 = 0, _Object$entries2 = Object.entries(this.props); _i3 < _Object$entries2.length; _i3++) {\n _loop2();\n }\n\n return errors;\n }\n /**\n * Assert that given `obj` is valid.\n *\n * @example\n * const schema = new Schema({ name: String })\n * schema.assert({ name: 1 }) // Throws an error\n *\n * @param {Object} obj\n * @param {Object} [opts]\n */\n\n }, {\n key: \"assert\",\n value: function assert(obj, opts) {\n var _this$validate = this.validate(obj, opts),\n _this$validate2 = _slicedToArray(_this$validate, 1),\n err = _this$validate2[0];\n\n if (err) throw err;\n }\n /**\n * Override default error messages.\n *\n * @example\n * const hex = (val) => /^0x[0-9a-f]+$/.test(val)\n * schema.path('some.path').use({ hex })\n * schema.message('hex', path => `${path} must be hexadecimal`)\n *\n * @example\n * schema.message({ hex: path => `${path} must be hexadecimal` })\n *\n * @param {String|Object} name - name of the validator or an object with name-message pairs\n * @param {String|Function} [message] - the message or message generator to use\n * @return {Schema}\n */\n\n }, {\n key: \"message\",\n value: function message(name, _message) {\n (0, _utils.assign)(name, _message, this.messages);\n return this;\n }\n /**\n * Override default validators.\n *\n * @example\n * schema.validator('required', val => val != null)\n *\n * @example\n * schema.validator({ required: val => val != null })\n *\n * @param {String|Object} name - name of the validator or an object with name-function pairs\n * @param {Function} [fn] - the function to use\n * @return {Schema}\n */\n\n }, {\n key: \"validator\",\n value: function validator(name, fn) {\n (0, _utils.assign)(name, fn, this.validators);\n return this;\n }\n /**\n * Override default typecasters.\n *\n * @example\n * schema.typecaster('SomeClass', val => new SomeClass(val))\n *\n * @example\n * schema.typecaster({ SomeClass: val => new SomeClass(val) })\n *\n * @param {String|Object} name - name of the validator or an object with name-function pairs\n * @param {Function} [fn] - the function to use\n * @return {Schema}\n */\n\n }, {\n key: \"typecaster\",\n value: function typecaster(name, fn) {\n (0, _utils.assign)(name, fn, this.typecasters);\n return this;\n }\n /**\n * Accepts a function that is called whenever new props are added.\n *\n * @param {Function} fn - the function to call\n * @return {Schema}\n * @private\n */\n\n }, {\n key: \"hook\",\n value: function hook(fn) {\n this.hooks.push(fn);\n return this;\n }\n /**\n * Notify all subscribers that a property has been added.\n *\n * @param {String} path - the path of the property\n * @param {Property} prop - the new property\n * @return {Schema}\n * @private\n */\n\n }, {\n key: \"propagate\",\n value: function propagate(path, prop) {\n this.hooks.forEach(function (fn) {\n return fn(path, prop);\n });\n return this;\n }\n }]);\n\n return Schema;\n}(); // Export ValidationError\n\n\nexports[\"default\"] = Schema;\nSchema.ValidationError = _error[\"default\"];\nmodule.exports = exports.default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.assign = assign;\nexports.enumerate = enumerate;\nexports.join = join;\nexports.walk = walk;\n\nvar _dot = _interopRequireDefault(require(\"@eivifj/dot\"));\n\nvar _componentType = _interopRequireDefault(require(\"component-type\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n/**\n * Assign given key and value (or object) to given object\n *\n * @private\n */\nfunction assign(key, val, obj) {\n if (typeof key == 'string') {\n obj[key] = val;\n return;\n }\n\n Object.keys(key).forEach(function (k) {\n return obj[k] = key[k];\n });\n}\n/**\n * Enumerate all permutations of `path`, replacing $ with array indices\n *\n * @private\n */\n\n\nfunction enumerate(path, obj, callback) {\n var parts = path.split(/\\.\\$(?=\\.|$)/);\n var first = parts.shift();\n\n var arr = _dot[\"default\"].get(obj, first);\n\n if (!parts.length) {\n return callback(first, arr);\n }\n\n if (!Array.isArray(arr)) {\n return;\n }\n\n for (var i = 0; i < arr.length; i++) {\n var current = join(i, first);\n var next = current + parts.join('.$');\n enumerate(next, obj, callback);\n }\n}\n/**\n * Walk object and call `callback` with path and prop name\n *\n * @private\n */\n\n\nfunction walk(obj, callback, path, prop) {\n var type = (0, _componentType[\"default\"])(obj);\n\n if (type === 'array') {\n obj.forEach(function (v, i) {\n return walk(v, callback, join(i, path), join('$', prop));\n });\n return;\n }\n\n if (type !== 'object') {\n return;\n }\n\n for (var _i = 0, _Object$entries = Object.entries(obj); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n key = _Object$entries$_i[0],\n val = _Object$entries$_i[1];\n\n var newPath = join(key, path);\n var newProp = join(key, prop);\n\n if (callback(newPath, newProp)) {\n walk(val, callback, newPath, newProp);\n }\n }\n}\n/**\n * Join `path` with `prefix`\n *\n * @private\n */\n\n\nfunction join(path, prefix) {\n return prefix ? \"\".concat(prefix, \".\").concat(path) : path;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _componentType = _interopRequireDefault(require(\"component-type\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/**\n * Default validators.\n *\n * @private\n */\nvar Validators = {\n /**\n * Validates presence.\n *\n * @param {Mixed} value - the value being validated\n * @param {Object} ctx - the object being validated\n * @param {Bolean} required\n * @return {Boolean}\n */\n required: function required(value, ctx, _required) {\n if (_required === false) return true;\n return value != null && value !== '';\n },\n\n /**\n * Validates type.\n *\n * @param {Mixed} value - the value being validated\n * @param {Object} ctx - the object being validated\n * @param {String|Function} name name of the type or a constructor\n * @return {Boolean}\n */\n type: function type(value, ctx, name) {\n if (value == null) return true;\n\n if (typeof name == 'function') {\n return value.constructor === name;\n }\n\n return (0, _componentType[\"default\"])(value) === name;\n },\n\n /**\n * Validates length.\n *\n * @param {String} value the string being validated\n * @param {Object} ctx the object being validated\n * @param {Object|Number} rules object with .min and/or .max props or a number\n * @param {Number} [rules.min] - minimum length\n * @param {Number} [rules.max] - maximum length\n * @return {Boolean}\n */\n length: function length(value, ctx, len) {\n if (value == null) return true;\n\n if (typeof len == 'number') {\n return value.length === len;\n }\n\n var min = len.min,\n max = len.max;\n if (min && value.length < min) return false;\n if (max && value.length > max) return false;\n return true;\n },\n\n /**\n * Validates size.\n *\n * @param {Number} value the number being validated\n * @param {Object} ctx the object being validated\n * @param {Object|Number} size object with .min and/or .max props or a number\n * @param {String|Number} [size.min] - minimum size\n * @param {String|Number} [size.max] - maximum size\n * @return {Boolean}\n */\n size: function size(value, ctx, _size) {\n if (value == null) return true;\n\n if (typeof _size == 'number') {\n return value === _size;\n }\n\n var min = _size.min,\n max = _size.max;\n if (parseInt(min) != null && value < min) return false;\n if (parseInt(max) != null && value > max) return false;\n return true;\n },\n\n /**\n * Validates enums.\n *\n * @param {String} value the string being validated\n * @param {Object} ctx the object being validated\n * @param {Array} enums array with allowed values\n * @return {Boolean}\n */\n \"enum\": function _enum(value, ctx, enums) {\n if (value == null) return true;\n return enums.includes(value);\n },\n\n /**\n * Validates against given `regexp`.\n *\n * @param {String} value the string beign validated\n * @param {Object} ctx the object being validated\n * @param {RegExp} regexp the regexp to validate against\n * @return {Boolean}\n */\n match: function match(value, ctx, regexp) {\n if (value == null) return true;\n return regexp.test(value);\n }\n};\nvar _default = Validators;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;","function valueOf(obj) {\n return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n // Test for strict equality first.\n if (a === b) return true;\n\n // Otherwise, if either of them == null they are not equal.\n if (a == null || b == null) return false;\n\n if (Array.isArray(a)) {\n return (\n Array.isArray(b) &&\n a.length === b.length &&\n a.every(function(item, index) {\n return valueEqual(item, b[index]);\n })\n );\n }\n\n if (typeof a === 'object' || typeof b === 'object') {\n var aValue = valueOf(a);\n var bValue = valueOf(b);\n\n if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n return Object.keys(Object.assign({}, a, b)).every(function(key) {\n return valueEqual(a[key], b[key]);\n });\n }\n\n return false;\n}\n\nexport default valueEqual;\n","module.exports = read\n\nvar MSB = 0x80\n , REST = 0x7F\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length\n\n do {\n if (counter >= l) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28\n ? (b & REST) << shift\n : (b & REST) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB)\n\n read.bytes = counter - offset\n\n return res\n}\n","module.exports = encode\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB\n num /= 128\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n \n encode.bytes = offset - oldOffset + 1\n \n return out\n}\n","module.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n","\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n}\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\n\n// Number.MAX_SAFE_INTEGER\nvar MAX_SAFE_INTEGER = 9007199254740991\n\nfunction checkUInt53 (n) {\n if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')\n}\n\nfunction encode (number, buffer, offset) {\n checkUInt53(number)\n\n if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(number))\n if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')\n if (!offset) offset = 0\n\n // 8 bit\n if (number < 0xfd) {\n buffer.writeUInt8(number, offset)\n encode.bytes = 1\n\n // 16 bit\n } else if (number <= 0xffff) {\n buffer.writeUInt8(0xfd, offset)\n buffer.writeUInt16LE(number, offset + 1)\n encode.bytes = 3\n\n // 32 bit\n } else if (number <= 0xffffffff) {\n buffer.writeUInt8(0xfe, offset)\n buffer.writeUInt32LE(number, offset + 1)\n encode.bytes = 5\n\n // 64 bit\n } else {\n buffer.writeUInt8(0xff, offset)\n buffer.writeUInt32LE(number >>> 0, offset + 1)\n buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)\n encode.bytes = 9\n }\n\n return buffer\n}\n\nfunction decode (buffer, offset) {\n if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')\n if (!offset) offset = 0\n\n var first = buffer.readUInt8(offset)\n\n // 8 bit\n if (first < 0xfd) {\n decode.bytes = 1\n return first\n\n // 16 bit\n } else if (first === 0xfd) {\n decode.bytes = 3\n return buffer.readUInt16LE(offset + 1)\n\n // 32 bit\n } else if (first === 0xfe) {\n decode.bytes = 5\n return buffer.readUInt32LE(offset + 1)\n\n // 64 bit\n } else {\n decode.bytes = 9\n var lo = buffer.readUInt32LE(offset + 1)\n var hi = buffer.readUInt32LE(offset + 5)\n var number = hi * 0x0100000000 + lo\n checkUInt53(number)\n\n return number\n }\n}\n\nfunction encodingLength (number) {\n checkUInt53(number)\n\n return (\n number < 0xfd ? 1\n : number <= 0xffff ? 3\n : number <= 0xffffffff ? 5\n : 9\n )\n}\n\nmodule.exports = { encode: encode, decode: decode, encodingLength: encodingLength }\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n","\"use strict\"\n\nexports.TextEncoder =\n typeof TextEncoder !== \"undefined\" ? TextEncoder : require(\"util\").TextEncoder\n\nexports.TextDecoder =\n typeof TextDecoder !== \"undefined\" ? TextDecoder : require(\"util\").TextDecoder\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar swarm = require(\"swarm-js\");\nvar Bzz = function Bzz(provider) {\n this.givenProvider = Bzz.givenProvider;\n if (provider && provider._requestManager) {\n provider = provider.currentProvider;\n }\n // only allow file picker when in browser\n if (typeof document !== 'undefined') {\n this.pick = swarm.pick;\n }\n this.setProvider(provider);\n};\n// set default ethereum provider\n/* jshint ignore:start */\nBzz.givenProvider = null;\nif (typeof ethereum !== 'undefined' && ethereum.bzz) {\n Bzz.givenProvider = ethereum.bzz;\n}\n/* jshint ignore:end */\nBzz.prototype.setProvider = function (provider) {\n // is ethereum provider\n if (!!provider && typeof provider === 'object' && typeof provider.bzz === 'string') {\n provider = provider.bzz;\n // is no string, set default\n }\n // else if(!_.isString(provider)) {\n // provider = 'http://swarm-gateways.net'; // default to gateway\n // }\n if (typeof provider === 'string') {\n this.currentProvider = provider;\n }\n else {\n this.currentProvider = null;\n var noProviderError = new Error('No provider set, please set one using bzz.setProvider().');\n this.download = this.upload = this.isAvailable = function () {\n throw noProviderError;\n };\n return false;\n }\n // add functions\n this.download = swarm.at(provider).download;\n this.upload = swarm.at(provider).upload;\n this.isAvailable = swarm.at(provider).isAvailable;\n return true;\n};\nmodule.exports = Bzz;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file errors.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2017\n */\n\"use strict\";\nmodule.exports = {\n ErrorResponse: function (result) {\n var message = !!result && !!result.error && !!result.error.message ? result.error.message : JSON.stringify(result);\n var data = (!!result.error && !!result.error.data) ? result.error.data : null;\n var err = new Error('Returned error: ' + message);\n err.data = data;\n return err;\n },\n InvalidNumberOfParams: function (got, expected, method) {\n return new Error('Invalid number of parameters for \"' + method + '\". Got ' + got + ' expected ' + expected + '!');\n },\n InvalidConnection: function (host, event) {\n return this.ConnectionError('CONNECTION ERROR: Couldn\\'t connect to node ' + host + '.', event);\n },\n InvalidProvider: function () {\n return new Error('Provider not set or invalid');\n },\n InvalidResponse: function (result) {\n var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);\n return new Error(message);\n },\n ConnectionTimeout: function (ms) {\n return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived');\n },\n ConnectionNotOpenError: function (event) {\n return this.ConnectionError('connection not open on send()', event);\n },\n ConnectionCloseError: function (event) {\n if (typeof event === 'object' && event.code && event.reason) {\n return this.ConnectionError('CONNECTION ERROR: The connection got closed with ' +\n 'the close code `' + event.code + '` and the following ' +\n 'reason string `' + event.reason + '`', event);\n }\n return new Error('CONNECTION ERROR: The connection closed unexpectedly');\n },\n MaxAttemptsReachedOnReconnectingError: function () {\n return new Error('Maximum number of reconnect attempts reached!');\n },\n PendingRequestsOnReconnectingError: function () {\n return new Error('CONNECTION ERROR: Provider started to reconnect before the response got received!');\n },\n ConnectionError: function (msg, event) {\n const error = new Error(msg);\n if (event) {\n error.code = event.code;\n error.reason = event.reason;\n }\n return error;\n },\n RevertInstructionError: function (reason, signature) {\n var error = new Error('Your request got reverted with the following reason string: ' + reason);\n error.reason = reason;\n error.signature = signature;\n return error;\n },\n TransactionRevertInstructionError: function (reason, signature, receipt) {\n var error = new Error('Transaction has been reverted by the EVM:\\n' + JSON.stringify(receipt, null, 2));\n error.reason = reason;\n error.signature = signature;\n error.receipt = receipt;\n return error;\n },\n TransactionError: function (message, receipt) {\n var error = new Error(message);\n error.receipt = receipt;\n return error;\n },\n NoContractAddressFoundError: function (receipt) {\n return this.TransactionError('The transaction receipt didn\\'t contain a contract address.', receipt);\n },\n ContractCodeNotStoredError: function (receipt) {\n return this.TransactionError('The contract code couldn\\'t be stored, please check your gas limit.', receipt);\n },\n TransactionRevertedWithoutReasonError: function (receipt) {\n return this.TransactionError('Transaction has been reverted by the EVM:\\n' + JSON.stringify(receipt, null, 2), receipt);\n },\n TransactionOutOfGasError: function (receipt) {\n return this.TransactionError('Transaction ran out of gas. Please provide more gas:\\n' + JSON.stringify(receipt, null, 2), receipt);\n },\n ResolverMethodMissingError: function (address, name) {\n return new Error('The resolver at ' + address + 'does not implement requested method: \"' + name + '\".');\n },\n ContractMissingABIError: function () {\n return new Error('You must provide the json interface of the contract when instantiating a contract object.');\n },\n ContractOnceRequiresCallbackError: function () {\n return new Error('Once requires a callback as the second parameter.');\n },\n ContractEventDoesNotExistError: function (eventName) {\n return new Error('Event \"' + eventName + '\" doesn\\'t exist in this contract.');\n },\n ContractReservedEventError: function (type) {\n return new Error('The event \"' + type + '\" is a reserved event name, you can\\'t use it.');\n },\n ContractMissingDeployDataError: function () {\n return new Error('No \"data\" specified in neither the given options, nor the default options.');\n },\n ContractNoAddressDefinedError: function () {\n return new Error('This contract object doesn\\'t have address set yet, please set an address first.');\n },\n ContractNoFromAddressDefinedError: function () {\n return new Error('No \"from\" address specified in neither the given options, nor the default options.');\n }\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file formatters.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2017\n */\n\"use strict\";\nvar utils = require('web3-utils');\nvar Iban = require('web3-eth-iban');\n/**\n * Will format the given storage key array values to hex strings.\n *\n * @method inputStorageKeysFormatter\n *\n * @param {Array} keys\n *\n * @returns {Array}\n */\nvar inputStorageKeysFormatter = function (keys) {\n return keys.map(utils.numberToHex);\n};\n/**\n * Will format the given proof response from the node.\n *\n * @method outputProofFormatter\n *\n * @param {object} proof\n *\n * @returns {object}\n */\nvar outputProofFormatter = function (proof) {\n proof.address = utils.toChecksumAddress(proof.address);\n proof.nonce = utils.hexToNumberString(proof.nonce);\n proof.balance = utils.hexToNumberString(proof.balance);\n return proof;\n};\n/**\n * Should the format output to a big number\n *\n * @method outputBigNumberFormatter\n *\n * @param {String|Number|BigNumber|BN} number\n *\n * @returns {BN} object\n */\nvar outputBigNumberFormatter = function (number) {\n return utils.toBN(number).toString(10);\n};\n/**\n * Returns true if the given blockNumber is 'latest', 'pending', or 'earliest.\n *\n * @method isPredefinedBlockNumber\n *\n * @param {String} blockNumber\n *\n * @returns {Boolean}\n */\nvar isPredefinedBlockNumber = function (blockNumber) {\n return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';\n};\n/**\n * Returns the given block number as hex string or does return the defaultBlock property of the current module\n *\n * @method inputDefaultBlockNumberFormatter\n *\n * @param {String|Number|BN|BigNumber} blockNumber\n *\n * @returns {String}\n */\nvar inputDefaultBlockNumberFormatter = function (blockNumber) {\n if (this && (blockNumber === undefined || blockNumber === null)) {\n return inputBlockNumberFormatter(this.defaultBlock);\n }\n return inputBlockNumberFormatter(blockNumber);\n};\n/**\n * Returns the given block number as hex string or the predefined block number 'latest', 'pending', 'earliest', 'genesis'\n *\n * @param {String|Number|BN|BigNumber} blockNumber\n *\n * @returns {String}\n */\nvar inputBlockNumberFormatter = function (blockNumber) {\n if (blockNumber === undefined) {\n return undefined;\n }\n if (isPredefinedBlockNumber(blockNumber)) {\n return blockNumber;\n }\n if (blockNumber === 'genesis') {\n return '0x0';\n }\n return (utils.isHexStrict(blockNumber)) ? ((typeof blockNumber === 'string') ? blockNumber.toLowerCase() : blockNumber) : utils.numberToHex(blockNumber);\n};\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method _txInputFormatter\n * @param {Object} transaction options\n * @returns object\n */\nvar _txInputFormatter = function (options) {\n if (options.to) { // it might be contract creation\n options.to = inputAddressFormatter(options.to);\n }\n if (options.data && options.input) {\n throw new Error('You can\\'t have \"data\" and \"input\" as properties of transactions at the same time, please use either \"data\" or \"input\" instead.');\n }\n if (!options.data && options.input) {\n options.data = options.input;\n delete options.input;\n }\n if (options.data && !options.data.startsWith('0x')) {\n options.data = '0x' + options.data;\n }\n if (options.data && !utils.isHex(options.data)) {\n throw new Error('The data field must be HEX encoded data.');\n }\n // allow both\n if (options.gas || options.gasLimit) {\n options.gas = options.gas || options.gasLimit;\n }\n if (options.maxPriorityFeePerGas || options.maxFeePerGas) {\n delete options.gasPrice;\n }\n ['gasPrice', 'gas', 'value', 'maxPriorityFeePerGas', 'maxFeePerGas', 'nonce'].filter(function (key) {\n return options[key] !== undefined;\n }).forEach(function (key) {\n options[key] = utils.numberToHex(options[key]);\n });\n return options;\n};\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputCallFormatter\n * @param {Object} transaction options\n * @returns object\n */\nvar inputCallFormatter = function (options) {\n options = _txInputFormatter(options);\n var from = options.from || (this ? this.defaultAccount : null);\n if (from) {\n options.from = inputAddressFormatter(from);\n }\n return options;\n};\n/**\n * Formats the input of a transaction and converts all values to HEX\n *\n * @method inputTransactionFormatter\n * @param {Object} options\n * @returns object\n */\nvar inputTransactionFormatter = function (options) {\n options = _txInputFormatter(options);\n // check from, only if not number, or object\n if (!(typeof options.from === 'number') && !(!!options.from && typeof options.from === 'object')) {\n options.from = options.from || (this ? this.defaultAccount : null);\n if (!options.from && !(typeof options.from === 'number')) {\n throw new Error('The send transactions \"from\" field must be defined!');\n }\n options.from = inputAddressFormatter(options.from);\n }\n return options;\n};\n/**\n * Hex encodes the data passed to eth_sign and personal_sign\n *\n * @method inputSignFormatter\n * @param {String} data\n * @returns {String}\n */\nvar inputSignFormatter = function (data) {\n return (utils.isHexStrict(data)) ? data : utils.utf8ToHex(data);\n};\n/**\n * Formats the output of a transaction to its proper values\n *\n * @method outputTransactionFormatter\n * @param {Object} tx\n * @returns {Object}\n */\nvar outputTransactionFormatter = function (tx) {\n if (tx.blockNumber !== null)\n tx.blockNumber = utils.hexToNumber(tx.blockNumber);\n if (tx.transactionIndex !== null)\n tx.transactionIndex = utils.hexToNumber(tx.transactionIndex);\n tx.nonce = utils.hexToNumber(tx.nonce);\n tx.gas = utils.hexToNumber(tx.gas);\n if (tx.gasPrice)\n tx.gasPrice = outputBigNumberFormatter(tx.gasPrice);\n if (tx.maxFeePerGas)\n tx.maxFeePerGas = outputBigNumberFormatter(tx.maxFeePerGas);\n if (tx.maxPriorityFeePerGas)\n tx.maxPriorityFeePerGas = outputBigNumberFormatter(tx.maxPriorityFeePerGas);\n if (tx.type)\n tx.type = utils.hexToNumber(tx.type);\n tx.value = outputBigNumberFormatter(tx.value);\n if (tx.to && utils.isAddress(tx.to)) { // tx.to could be `0x0` or `null` while contract creation\n tx.to = utils.toChecksumAddress(tx.to);\n }\n else {\n tx.to = null; // set to `null` if invalid address\n }\n if (tx.from) {\n tx.from = utils.toChecksumAddress(tx.from);\n }\n return tx;\n};\n/**\n * Formats the output of a transaction receipt to its proper values\n *\n * @method outputTransactionReceiptFormatter\n * @param {Object} receipt\n * @returns {Object}\n */\nvar outputTransactionReceiptFormatter = function (receipt) {\n if (typeof receipt !== 'object') {\n throw new Error('Received receipt is invalid: ' + receipt);\n }\n if (receipt.blockNumber !== null)\n receipt.blockNumber = utils.hexToNumber(receipt.blockNumber);\n if (receipt.transactionIndex !== null)\n receipt.transactionIndex = utils.hexToNumber(receipt.transactionIndex);\n receipt.cumulativeGasUsed = utils.hexToNumber(receipt.cumulativeGasUsed);\n receipt.gasUsed = utils.hexToNumber(receipt.gasUsed);\n if (Array.isArray(receipt.logs)) {\n receipt.logs = receipt.logs.map(outputLogFormatter);\n }\n if (receipt.effectiveGasPrice) {\n receipt.effectiveGasPrice = utils.hexToNumber(receipt.effectiveGasPrice);\n }\n if (receipt.contractAddress) {\n receipt.contractAddress = utils.toChecksumAddress(receipt.contractAddress);\n }\n if (typeof receipt.status !== 'undefined' && receipt.status !== null) {\n receipt.status = Boolean(parseInt(receipt.status));\n }\n return receipt;\n};\n/**\n * Formats the output of a block to its proper values\n *\n * @method outputBlockFormatter\n * @param {Object} block\n * @returns {Object}\n */\nvar outputBlockFormatter = function (block) {\n // transform to number\n block.gasLimit = utils.hexToNumber(block.gasLimit);\n block.gasUsed = utils.hexToNumber(block.gasUsed);\n block.size = utils.hexToNumber(block.size);\n block.timestamp = utils.hexToNumber(block.timestamp);\n if (block.number !== null)\n block.number = utils.hexToNumber(block.number);\n if (block.difficulty)\n block.difficulty = outputBigNumberFormatter(block.difficulty);\n if (block.totalDifficulty)\n block.totalDifficulty = outputBigNumberFormatter(block.totalDifficulty);\n if (Array.isArray(block.transactions)) {\n block.transactions.forEach(function (item) {\n if (!(typeof item === 'string'))\n return outputTransactionFormatter(item);\n });\n }\n if (block.miner)\n block.miner = utils.toChecksumAddress(block.miner);\n if (block.baseFeePerGas)\n block.baseFeePerGas = utils.hexToNumber(block.baseFeePerGas);\n return block;\n};\n/**\n * Formats the input of a log\n *\n * @method inputLogFormatter\n * @param {Object} log object\n * @returns {Object} log\n */\nvar inputLogFormatter = function (options) {\n var toTopic = function (value) {\n if (value === null || typeof value === 'undefined')\n return null;\n value = String(value);\n if (value.indexOf('0x') === 0)\n return value;\n else\n return utils.fromUtf8(value);\n };\n if (options === undefined)\n options = {};\n // If options !== undefined, don't blow out existing data\n if (options.fromBlock === undefined)\n options = { ...options, fromBlock: 'latest' };\n if (options.fromBlock || options.fromBlock === 0)\n options.fromBlock = inputBlockNumberFormatter(options.fromBlock);\n if (options.toBlock || options.toBlock === 0)\n options.toBlock = inputBlockNumberFormatter(options.toBlock);\n // make sure topics, get converted to hex\n options.topics = options.topics || [];\n options.topics = options.topics.map(function (topic) {\n return (Array.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);\n });\n toTopic = null;\n if (options.address) {\n options.address = (Array.isArray(options.address)) ? options.address.map(function (addr) {\n return inputAddressFormatter(addr);\n }) : inputAddressFormatter(options.address);\n }\n return options;\n};\n/**\n * Formats the output of a log\n *\n * @method outputLogFormatter\n * @param {Object} log object\n * @returns {Object} log\n */\nvar outputLogFormatter = function (log) {\n // generate a custom log id\n if (typeof log.blockHash === 'string' &&\n typeof log.transactionHash === 'string' &&\n typeof log.logIndex === 'string') {\n var shaId = utils.sha3(log.blockHash.replace('0x', '') + log.transactionHash.replace('0x', '') + log.logIndex.replace('0x', ''));\n log.id = 'log_' + shaId.replace('0x', '').substr(0, 8);\n }\n else if (!log.id) {\n log.id = null;\n }\n if (log.blockNumber !== null)\n log.blockNumber = utils.hexToNumber(log.blockNumber);\n if (log.transactionIndex !== null)\n log.transactionIndex = utils.hexToNumber(log.transactionIndex);\n if (log.logIndex !== null)\n log.logIndex = utils.hexToNumber(log.logIndex);\n if (log.address) {\n log.address = utils.toChecksumAddress(log.address);\n }\n return log;\n};\n/**\n * Formats the input of a whisper post and converts all values to HEX\n *\n * @method inputPostFormatter\n * @param {Object} transaction object\n * @returns {Object}\n */\nvar inputPostFormatter = function (post) {\n // post.payload = utils.toHex(post.payload);\n if (post.ttl)\n post.ttl = utils.numberToHex(post.ttl);\n if (post.workToProve)\n post.workToProve = utils.numberToHex(post.workToProve);\n if (post.priority)\n post.priority = utils.numberToHex(post.priority);\n // fallback\n if (!Array.isArray(post.topics)) {\n post.topics = post.topics ? [post.topics] : [];\n }\n // format the following options\n post.topics = post.topics.map(function (topic) {\n // convert only if not hex\n return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);\n });\n return post;\n};\n/**\n * Formats the output of a received post message\n *\n * @method outputPostFormatter\n * @param {Object}\n * @returns {Object}\n */\nvar outputPostFormatter = function (post) {\n post.expiry = utils.hexToNumber(post.expiry);\n post.sent = utils.hexToNumber(post.sent);\n post.ttl = utils.hexToNumber(post.ttl);\n post.workProved = utils.hexToNumber(post.workProved);\n // post.payloadRaw = post.payload;\n // post.payload = utils.hexToAscii(post.payload);\n // if (utils.isJson(post.payload)) {\n // post.payload = JSON.parse(post.payload);\n // }\n // format the following options\n if (!post.topics) {\n post.topics = [];\n }\n post.topics = post.topics.map(function (topic) {\n return utils.toUtf8(topic);\n });\n return post;\n};\nvar inputAddressFormatter = function (address) {\n var iban = new Iban(address);\n if (iban.isValid() && iban.isDirect()) {\n return iban.toAddress().toLowerCase();\n }\n else if (utils.isAddress(address)) {\n return '0x' + address.toLowerCase().replace('0x', '');\n }\n throw new Error(`Provided address ${address} is invalid, the capitalization checksum test failed, or it's an indirect IBAN address which can't be converted.`);\n};\nvar outputSyncingFormatter = function (result) {\n result.startingBlock = utils.hexToNumber(result.startingBlock);\n result.currentBlock = utils.hexToNumber(result.currentBlock);\n result.highestBlock = utils.hexToNumber(result.highestBlock);\n if (result.knownStates) {\n result.knownStates = utils.hexToNumber(result.knownStates);\n result.pulledStates = utils.hexToNumber(result.pulledStates);\n }\n return result;\n};\nmodule.exports = {\n inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,\n inputBlockNumberFormatter: inputBlockNumberFormatter,\n inputCallFormatter: inputCallFormatter,\n inputTransactionFormatter: inputTransactionFormatter,\n inputAddressFormatter: inputAddressFormatter,\n inputPostFormatter: inputPostFormatter,\n inputLogFormatter: inputLogFormatter,\n inputSignFormatter: inputSignFormatter,\n inputStorageKeysFormatter: inputStorageKeysFormatter,\n outputProofFormatter: outputProofFormatter,\n outputBigNumberFormatter: outputBigNumberFormatter,\n outputTransactionFormatter: outputTransactionFormatter,\n outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,\n outputBlockFormatter: outputBlockFormatter,\n outputLogFormatter: outputLogFormatter,\n outputPostFormatter: outputPostFormatter,\n outputSyncingFormatter: outputSyncingFormatter\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar errors = require('./errors');\nvar formatters = require('./formatters');\nmodule.exports = {\n errors: errors,\n formatters: formatters\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @author Marek Kotewicz \n * @date 2017\n */\n'use strict';\nvar errors = require('web3-core-helpers').errors;\nvar formatters = require('web3-core-helpers').formatters;\nvar utils = require('web3-utils');\nvar promiEvent = require('web3-core-promievent');\nvar Subscriptions = require('web3-core-subscriptions').subscriptions;\nvar EthersTransactionUtils = require('@ethersproject/transactions');\nvar Method = function Method(options) {\n if (!options.call || !options.name) {\n throw new Error('When creating a method you need to provide at least the \"name\" and \"call\" property.');\n }\n this.name = options.name;\n this.call = options.call;\n this.params = options.params || 0;\n this.inputFormatter = options.inputFormatter;\n this.outputFormatter = options.outputFormatter;\n this.transformPayload = options.transformPayload;\n this.extraFormatters = options.extraFormatters;\n this.abiCoder = options.abiCoder; // Will be used to encode the revert reason string\n this.requestManager = options.requestManager;\n // reference to eth.accounts\n this.accounts = options.accounts;\n this.defaultBlock = options.defaultBlock || 'latest';\n this.defaultAccount = options.defaultAccount || null;\n this.transactionBlockTimeout = options.transactionBlockTimeout || 50;\n this.transactionConfirmationBlocks = options.transactionConfirmationBlocks || 24;\n this.transactionPollingTimeout = options.transactionPollingTimeout || 750;\n this.transactionPollingInterval = options.transactionPollingInterval || 1000;\n this.blockHeaderTimeout = options.blockHeaderTimeout || 10; // 10 seconds\n this.defaultCommon = options.defaultCommon;\n this.defaultChain = options.defaultChain;\n this.defaultHardfork = options.defaultHardfork;\n this.handleRevert = options.handleRevert;\n};\nMethod.prototype.setRequestManager = function (requestManager, accounts) {\n this.requestManager = requestManager;\n // reference to eth.accounts\n if (accounts) {\n this.accounts = accounts;\n }\n};\nMethod.prototype.createFunction = function (requestManager, accounts) {\n var func = this.buildCall();\n func.call = this.call;\n this.setRequestManager(requestManager || this.requestManager, accounts || this.accounts);\n return func;\n};\nMethod.prototype.attachToObject = function (obj) {\n var func = this.buildCall();\n func.call = this.call;\n var name = this.name.split('.');\n if (name.length > 1) {\n obj[name[0]] = obj[name[0]] || {};\n obj[name[0]][name[1]] = func;\n }\n else {\n obj[name[0]] = func;\n }\n};\n/**\n * Should be used to determine name of the jsonrpc method based on arguments\n *\n * @method getCall\n * @param {Array} arguments\n * @return {String} name of jsonrpc method\n */\nMethod.prototype.getCall = function (args) {\n return typeof this.call === 'function' ? this.call(args) : this.call;\n};\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nMethod.prototype.extractCallback = function (args) {\n if (typeof (args[args.length - 1]) === 'function') {\n return args.pop(); // modify the args array!\n }\n};\n/**\n * Should be called to check if the number of arguments is correct\n *\n * @method validateArgs\n * @param {Array} arguments\n * @throws {Error} if it is not\n */\nMethod.prototype.validateArgs = function (args) {\n if (args.length !== this.params) {\n throw errors.InvalidNumberOfParams(args.length, this.params, this.name);\n }\n};\n/**\n * Should be called to format input args of method\n *\n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nMethod.prototype.formatInput = function (args) {\n var _this = this;\n if (!this.inputFormatter) {\n return args;\n }\n return this.inputFormatter.map(function (formatter, index) {\n // bind this for defaultBlock, and defaultAccount\n return formatter ? formatter.call(_this, args[index]) : args[index];\n });\n};\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param {Object}\n * @return {Object}\n */\nMethod.prototype.formatOutput = function (result) {\n var _this = this;\n if (Array.isArray(result)) {\n return result.map(function (res) {\n return _this.outputFormatter && res ? _this.outputFormatter(res) : res;\n });\n }\n else {\n return this.outputFormatter && result ? this.outputFormatter(result) : result;\n }\n};\n/**\n * Should create payload from given input args\n *\n * @method toPayload\n * @param {Array} args\n * @return {Object}\n */\nMethod.prototype.toPayload = function (args) {\n var call = this.getCall(args);\n var callback = this.extractCallback(args);\n var params = this.formatInput(args);\n this.validateArgs(params);\n var payload = {\n method: call,\n params: params,\n callback: callback\n };\n if (this.transformPayload) {\n payload = this.transformPayload(payload);\n }\n return payload;\n};\nMethod.prototype._confirmTransaction = function (defer, result, payload) {\n var method = this, promiseResolved = false, canUnsubscribe = true, timeoutCount = 0, confirmationCount = 0, intervalId = null, blockHeaderTimeoutId = null, lastBlock = null, receiptJSON = '', gasProvided = ((!!payload.params[0] && typeof payload.params[0] === 'object') && payload.params[0].gas) ? payload.params[0].gas : null, isContractDeployment = (!!payload.params[0] && typeof payload.params[0] === 'object') &&\n payload.params[0].data &&\n payload.params[0].from &&\n !payload.params[0].to, hasBytecode = isContractDeployment && payload.params[0].data.length > 2;\n // add custom send Methods\n var _ethereumCalls = [\n new Method({\n name: 'getBlockByNumber',\n call: 'eth_getBlockByNumber',\n params: 2,\n inputFormatter: [formatters.inputBlockNumberFormatter, function (val) {\n return !!val;\n }],\n outputFormatter: formatters.outputBlockFormatter\n }),\n new Method({\n name: 'getTransactionReceipt',\n call: 'eth_getTransactionReceipt',\n params: 1,\n inputFormatter: [null],\n outputFormatter: formatters.outputTransactionReceiptFormatter\n }),\n new Method({\n name: 'getCode',\n call: 'eth_getCode',\n params: 2,\n inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]\n }),\n new Method({\n name: 'getTransactionByHash',\n call: 'eth_getTransactionByHash',\n params: 1,\n inputFormatter: [null],\n outputFormatter: formatters.outputTransactionFormatter\n }),\n new Subscriptions({\n name: 'subscribe',\n type: 'eth',\n subscriptions: {\n 'newBlockHeaders': {\n subscriptionName: 'newHeads',\n params: 0,\n outputFormatter: formatters.outputBlockFormatter\n }\n }\n })\n ];\n // attach methods to this._ethereumCall\n var _ethereumCall = {};\n _ethereumCalls.forEach(mthd => {\n mthd.attachToObject(_ethereumCall);\n mthd.requestManager = method.requestManager; // assign rather than call setRequestManager()\n });\n // fire \"receipt\" and confirmation events and resolve after\n var checkConfirmation = function (existingReceipt, isPolling, err, blockHeader, sub) {\n if (!err) {\n // create fake unsubscribe\n if (!sub) {\n sub = {\n unsubscribe: function () {\n clearInterval(intervalId);\n clearTimeout(blockHeaderTimeoutId);\n }\n };\n }\n // if we have a valid receipt we don't need to send a request\n return (existingReceipt ? promiEvent.resolve(existingReceipt) : _ethereumCall.getTransactionReceipt(result))\n // catch error from requesting receipt\n .catch(function (err) {\n sub.unsubscribe();\n promiseResolved = true;\n utils._fireError({\n message: 'Failed to check for transaction receipt:',\n data: err\n }, defer.eventEmitter, defer.reject);\n })\n // if CONFIRMATION listener exists check for confirmations, by setting canUnsubscribe = false\n .then(async function (receipt) {\n if (!receipt || !receipt.blockHash) {\n throw new Error('Receipt missing or blockHash null');\n }\n // apply extra formatters\n if (method.extraFormatters && method.extraFormatters.receiptFormatter) {\n receipt = method.extraFormatters.receiptFormatter(receipt);\n }\n // check if confirmation listener exists\n if (defer.eventEmitter.listeners('confirmation').length > 0) {\n var block;\n // If there was an immediately retrieved receipt, it's already\n // been confirmed by the direct call to checkConfirmation needed\n // for parity instant-seal\n if (existingReceipt === undefined || confirmationCount !== 0) {\n // Get latest block to emit with confirmation\n var latestBlock = await _ethereumCall.getBlockByNumber('latest');\n var latestBlockHash = latestBlock ? latestBlock.hash : null;\n if (isPolling) { // Check if actually a new block is existing on polling\n if (lastBlock) {\n block = await _ethereumCall.getBlockByNumber(lastBlock.number + 1);\n if (block) {\n lastBlock = block;\n defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash);\n }\n }\n else {\n block = await _ethereumCall.getBlockByNumber(receipt.blockNumber);\n lastBlock = block;\n defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash);\n }\n }\n else {\n defer.eventEmitter.emit('confirmation', confirmationCount, receipt, latestBlockHash);\n }\n }\n if ((isPolling && block) || !isPolling) {\n confirmationCount++;\n }\n canUnsubscribe = false;\n if (confirmationCount === method.transactionConfirmationBlocks + 1) { // add 1 so we account for conf 0\n sub.unsubscribe();\n defer.eventEmitter.removeAllListeners();\n }\n }\n return receipt;\n })\n // CHECK for CONTRACT DEPLOYMENT\n .then(async function (receipt) {\n if (isContractDeployment && !promiseResolved) {\n if (!receipt.contractAddress) {\n if (canUnsubscribe) {\n sub.unsubscribe();\n promiseResolved = true;\n }\n utils._fireError(errors.NoContractAddressFoundError(receipt), defer.eventEmitter, defer.reject, null, receipt);\n return;\n }\n var code;\n try {\n code = await _ethereumCall.getCode(receipt.contractAddress);\n }\n catch (err) {\n // ignore;\n }\n if (!code) {\n return;\n }\n // If deployment is status.true and there was a real\n // bytecode string, assume it was successful.\n var deploymentSuccess = receipt.status === true && hasBytecode;\n if (deploymentSuccess || code.length > 2) {\n defer.eventEmitter.emit('receipt', receipt);\n // if contract, return instance instead of receipt\n if (method.extraFormatters && method.extraFormatters.contractDeployFormatter) {\n defer.resolve(method.extraFormatters.contractDeployFormatter(receipt));\n }\n else {\n defer.resolve(receipt);\n }\n // need to remove listeners, as they aren't removed automatically when succesfull\n if (canUnsubscribe) {\n defer.eventEmitter.removeAllListeners();\n }\n }\n else {\n utils._fireError(errors.ContractCodeNotStoredError(receipt), defer.eventEmitter, defer.reject, null, receipt);\n }\n if (canUnsubscribe) {\n sub.unsubscribe();\n }\n promiseResolved = true;\n }\n return receipt;\n })\n // CHECK for normal tx check for receipt only\n .then(async function (receipt) {\n if (!isContractDeployment && !promiseResolved) {\n if (!receipt.outOfGas &&\n (!gasProvided || gasProvided !== receipt.gasUsed) &&\n (receipt.status === true || receipt.status === '0x1' || typeof receipt.status === 'undefined')) {\n defer.eventEmitter.emit('receipt', receipt);\n defer.resolve(receipt);\n // need to remove listeners, as they aren't removed automatically when succesfull\n if (canUnsubscribe) {\n defer.eventEmitter.removeAllListeners();\n }\n }\n else {\n receiptJSON = JSON.stringify(receipt, null, 2);\n if (receipt.status === false || receipt.status === '0x0') {\n try {\n var revertMessage = null;\n if (method.handleRevert &&\n (method.call === 'eth_sendTransaction' || method.call === 'eth_sendRawTransaction')) {\n var txReplayOptions = payload.params[0];\n // If send was raw, fetch the transaction and reconstitute the\n // original params so they can be replayed with `eth_call`\n if (method.call === 'eth_sendRawTransaction') {\n var rawTransactionHex = payload.params[0];\n var parsedTx = EthersTransactionUtils.parse(rawTransactionHex);\n txReplayOptions = formatters.inputTransactionFormatter({\n data: parsedTx.data,\n to: parsedTx.to,\n from: parsedTx.from,\n gas: parsedTx.gasLimit.toHexString(),\n gasPrice: parsedTx.gasPrice.toHexString(),\n value: parsedTx.value.toHexString()\n });\n }\n // Get revert reason string with eth_call\n revertMessage = await method.getRevertReason(txReplayOptions, receipt.blockNumber);\n if (revertMessage) { // Only throw a revert error if a revert reason is existing\n utils._fireError(errors.TransactionRevertInstructionError(revertMessage.reason, revertMessage.signature, receipt), defer.eventEmitter, defer.reject, null, receipt);\n }\n else {\n throw false; // Throw false and let the try/catch statement handle the error correctly after\n }\n }\n else {\n throw false; // Throw false and let the try/catch statement handle the error correctly after\n }\n }\n catch (error) {\n // Throw an normal revert error if no revert reason is given or the detection of it is disabled\n utils._fireError(errors.TransactionRevertedWithoutReasonError(receipt), defer.eventEmitter, defer.reject, null, receipt);\n }\n }\n else {\n // Throw OOG if status is not existing and provided gas and used gas are equal\n utils._fireError(errors.TransactionOutOfGasError(receipt), defer.eventEmitter, defer.reject, null, receipt);\n }\n }\n if (canUnsubscribe) {\n sub.unsubscribe();\n }\n promiseResolved = true;\n }\n })\n // time out the transaction if not mined after 50 blocks\n .catch(function () {\n timeoutCount++;\n // check to see if we are http polling\n if (!!isPolling) {\n // polling timeout is different than transactionBlockTimeout blocks since we are triggering every second\n if (timeoutCount - 1 >= method.transactionPollingTimeout) {\n sub.unsubscribe();\n promiseResolved = true;\n utils._fireError(errors.TransactionError('Transaction was not mined within ' + method.transactionPollingTimeout + ' seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!'), defer.eventEmitter, defer.reject);\n }\n }\n else {\n if (timeoutCount - 1 >= method.transactionBlockTimeout) {\n sub.unsubscribe();\n promiseResolved = true;\n utils._fireError(errors.TransactionError('Transaction was not mined within ' + method.transactionBlockTimeout + ' blocks, please make sure your transaction was properly sent. Be aware that it might still be mined!'), defer.eventEmitter, defer.reject);\n }\n }\n });\n }\n else {\n sub.unsubscribe();\n promiseResolved = true;\n utils._fireError({\n message: 'Failed to subscribe to new newBlockHeaders to confirm the transaction receipts.',\n data: err\n }, defer.eventEmitter, defer.reject);\n }\n };\n // start watching for confirmation depending on the support features of the provider\n var startWatching = function (existingReceipt) {\n let blockHeaderArrived = false;\n const startInterval = () => {\n intervalId = setInterval(checkConfirmation.bind(null, existingReceipt, true), method.transactionPollingInterval);\n };\n // If provider do not support event subscription use polling\n if (!this.requestManager.provider.on) {\n return startInterval();\n }\n // Subscribe to new block headers to look for tx receipt\n _ethereumCall.subscribe('newBlockHeaders', function (err, blockHeader, sub) {\n blockHeaderArrived = true;\n if (err || !blockHeader) {\n // fall back to polling\n return startInterval();\n }\n checkConfirmation(existingReceipt, false, err, blockHeader, sub);\n });\n // Fallback to polling if tx receipt didn't arrived in \"blockHeaderTimeout\" [10 seconds]\n blockHeaderTimeoutId = setTimeout(() => {\n if (!blockHeaderArrived) {\n startInterval();\n }\n }, this.blockHeaderTimeout * 1000);\n }.bind(this);\n // first check if we already have a confirmed transaction\n _ethereumCall.getTransactionReceipt(result)\n .then(function (receipt) {\n if (receipt && receipt.blockHash) {\n if (defer.eventEmitter.listeners('confirmation').length > 0) {\n // We must keep on watching for new Blocks, if a confirmation listener is present\n startWatching(receipt);\n }\n checkConfirmation(receipt, false);\n }\n else if (!promiseResolved) {\n startWatching();\n }\n })\n .catch(function () {\n if (!promiseResolved)\n startWatching();\n });\n};\nvar getWallet = function (from, accounts) {\n var wallet = null;\n // is index given\n if (typeof from === 'number') {\n wallet = accounts.wallet[from];\n // is account given\n }\n else if (!!from && typeof from === 'object' && from.address && from.privateKey) {\n wallet = from;\n // search in wallet for address\n }\n else {\n wallet = accounts.wallet[from.toLowerCase()];\n }\n return wallet;\n};\nMethod.prototype.buildCall = function () {\n var method = this, isSendTx = (method.call === 'eth_sendTransaction' || method.call === 'eth_sendRawTransaction'), // || method.call === 'personal_sendTransaction'\n isCall = (method.call === 'eth_call');\n // actual send function\n var send = function () {\n var defer = promiEvent(!isSendTx), payload = method.toPayload(Array.prototype.slice.call(arguments));\n // CALLBACK function\n var sendTxCallback = function (err, result) {\n if (method.handleRevert && isCall && method.abiCoder) {\n var reasonData;\n // Ganache / Geth <= 1.9.13 return the reason data as a successful eth_call response\n // Geth >= 1.9.15 attaches the reason data to an error object.\n // Geth 1.9.14 is missing revert reason (https://github.com/ethereum/web3.js/issues/3520)\n if (!err && method.isRevertReasonString(result)) {\n reasonData = result.substring(10);\n }\n else if (err && err.data) {\n reasonData = err.data.substring(10);\n }\n if (reasonData) {\n var reason = method.abiCoder.decodeParameter('string', '0x' + reasonData);\n var signature = 'Error(String)';\n utils._fireError(errors.RevertInstructionError(reason, signature), defer.eventEmitter, defer.reject, payload.callback, {\n reason: reason,\n signature: signature\n });\n return;\n }\n }\n try {\n result = method.formatOutput(result);\n }\n catch (e) {\n err = e;\n }\n if (result instanceof Error) {\n err = result;\n }\n if (!err) {\n if (payload.callback) {\n payload.callback(null, result);\n }\n }\n else {\n if (err.error) {\n err = err.error;\n }\n return utils._fireError(err, defer.eventEmitter, defer.reject, payload.callback);\n }\n // return PROMISE\n if (!isSendTx) {\n if (!err) {\n defer.resolve(result);\n }\n // return PROMIEVENT\n }\n else {\n defer.eventEmitter.emit('transactionHash', result);\n method._confirmTransaction(defer, result, payload);\n }\n };\n // SENDS the SIGNED SIGNATURE\n var sendSignedTx = function (sign) {\n var signedPayload = { ...payload,\n method: 'eth_sendRawTransaction',\n params: [sign.rawTransaction]\n };\n method.requestManager.send(signedPayload, sendTxCallback);\n };\n var sendRequest = function (payload, method) {\n if (method && method.accounts && method.accounts.wallet && method.accounts.wallet.length) {\n var wallet;\n // ETH_SENDTRANSACTION\n if (payload.method === 'eth_sendTransaction') {\n var tx = payload.params[0];\n wallet = getWallet((!!tx && typeof tx === 'object') ? tx.from : null, method.accounts);\n // If wallet was found, sign tx, and send using sendRawTransaction\n if (wallet && wallet.privateKey) {\n var tx = JSON.parse(JSON.stringify(tx));\n delete tx.from;\n if (method.defaultChain && !tx.chain) {\n tx.chain = method.defaultChain;\n }\n if (method.defaultHardfork && !tx.hardfork) {\n tx.hardfork = method.defaultHardfork;\n }\n if (method.defaultCommon && !tx.common) {\n tx.common = method.defaultCommon;\n }\n method.accounts.signTransaction(tx, wallet.privateKey)\n .then(sendSignedTx)\n .catch(function (err) {\n if (typeof defer.eventEmitter.listeners === 'function' && defer.eventEmitter.listeners('error').length) {\n try {\n defer.eventEmitter.emit('error', err);\n }\n catch (err) {\n // Ignore userland error prevent it to bubble up within web3.\n }\n defer.eventEmitter.removeAllListeners();\n defer.eventEmitter.catch(function () {\n });\n }\n defer.reject(err);\n });\n return;\n }\n // ETH_SIGN\n }\n else if (payload.method === 'eth_sign') {\n var data = payload.params[1];\n wallet = getWallet(payload.params[0], method.accounts);\n // If wallet was found, sign tx, and send using sendRawTransaction\n if (wallet && wallet.privateKey) {\n var sign = method.accounts.sign(data, wallet.privateKey);\n if (payload.callback) {\n payload.callback(null, sign.signature);\n }\n defer.resolve(sign.signature);\n return;\n }\n }\n }\n return method.requestManager.send(payload, sendTxCallback);\n };\n // Send the actual transaction\n if (isSendTx\n && !!payload.params[0]\n && typeof payload.params[0] === 'object'\n && (typeof payload.params[0].gasPrice === 'undefined'\n && (typeof payload.params[0].maxPriorityFeePerGas === 'undefined'\n || typeof payload.params[0].maxFeePerGas === 'undefined'))) {\n _handleTxPricing(method, payload.params[0]).then(txPricing => {\n if (txPricing.gasPrice !== undefined) {\n payload.params[0].gasPrice = txPricing.gasPrice;\n }\n else if (txPricing.maxPriorityFeePerGas !== undefined\n && txPricing.maxFeePerGas !== undefined) {\n payload.params[0].maxPriorityFeePerGas = txPricing.maxPriorityFeePerGas;\n payload.params[0].maxFeePerGas = txPricing.maxFeePerGas;\n }\n if (isSendTx) {\n setTimeout(() => {\n defer.eventEmitter.emit('sending', payload);\n }, 0);\n }\n sendRequest(payload, method);\n });\n }\n else {\n if (isSendTx) {\n setTimeout(() => {\n defer.eventEmitter.emit('sending', payload);\n }, 0);\n }\n sendRequest(payload, method);\n }\n if (isSendTx) {\n setTimeout(() => {\n defer.eventEmitter.emit('sent', payload);\n }, 0);\n }\n return defer.eventEmitter;\n };\n // necessary to attach things to the method\n send.method = method;\n // necessary for batch requests\n send.request = this.request.bind(this);\n return send;\n};\nfunction _handleTxPricing(method, tx) {\n return new Promise((resolve, reject) => {\n try {\n var getBlockByNumber = (new Method({\n name: 'getBlockByNumber',\n call: 'eth_getBlockByNumber',\n params: 2,\n inputFormatter: [function (blockNumber) {\n return blockNumber ? utils.toHex(blockNumber) : 'latest';\n }, function () {\n return false;\n }]\n })).createFunction(method.requestManager);\n var getGasPrice = (new Method({\n name: 'getGasPrice',\n call: 'eth_gasPrice',\n params: 0\n })).createFunction(method.requestManager);\n Promise.all([\n getBlockByNumber(),\n getGasPrice()\n ]).then(responses => {\n const [block, gasPrice] = responses;\n if ((tx.type === '0x2' || tx.type === undefined) &&\n (block && block.baseFeePerGas)) {\n // The network supports EIP-1559\n // Taken from https://github.com/ethers-io/ethers.js/blob/ba6854bdd5a912fe873d5da494cb5c62c190adde/packages/abstract-provider/src.ts/index.ts#L230\n let maxPriorityFeePerGas, maxFeePerGas;\n if (tx.gasPrice) {\n // Using legacy gasPrice property on an eip-1559 network,\n // so use gasPrice as both fee properties\n maxPriorityFeePerGas = tx.gasPrice;\n maxFeePerGas = tx.gasPrice;\n delete tx.gasPrice;\n }\n else {\n maxPriorityFeePerGas = tx.maxPriorityFeePerGas || '0x9502F900'; // 2.5 Gwei\n maxFeePerGas = tx.maxFeePerGas ||\n utils.toHex(utils.toBN(block.baseFeePerGas)\n .mul(utils.toBN(2))\n .add(utils.toBN(maxPriorityFeePerGas)));\n }\n resolve({ maxFeePerGas, maxPriorityFeePerGas });\n }\n else {\n if (tx.maxPriorityFeePerGas || tx.maxFeePerGas)\n throw Error(\"Network doesn't support eip-1559\");\n resolve({ gasPrice });\n }\n });\n }\n catch (error) {\n reject(error);\n }\n });\n}\n/**\n * Returns the revert reason string if existing or otherwise false.\n *\n * @method getRevertReason\n *\n * @param {Object} txOptions\n * @param {Number} blockNumber\n *\n * @returns {Promise}\n */\nMethod.prototype.getRevertReason = function (txOptions, blockNumber) {\n var self = this;\n return new Promise(function (resolve, reject) {\n (new Method({\n name: 'call',\n call: 'eth_call',\n params: 2,\n abiCoder: self.abiCoder,\n handleRevert: true\n }))\n .createFunction(self.requestManager)(txOptions, utils.numberToHex(blockNumber))\n .then(function () {\n resolve(false);\n })\n .catch(function (error) {\n if (error.reason) {\n resolve({\n reason: error.reason,\n signature: error.signature\n });\n }\n else {\n reject(error);\n }\n });\n });\n};\n/**\n * Checks if the given hex string is a revert message from the EVM\n *\n * @method isRevertReasonString\n *\n * @param {String} data - Hex string prefixed with 0x\n *\n * @returns {Boolean}\n */\nMethod.prototype.isRevertReasonString = function (data) {\n return typeof data === 'string' && ((data.length - 2) / 2) % 32 === 4 && data.substring(0, 10) === '0x08c379a0';\n};\n/**\n * Should be called to create the pure JSONRPC request which can be used in a batch request\n *\n * @method request\n * @return {Object} jsonrpc request\n */\nMethod.prototype.request = function () {\n var payload = this.toPayload(Array.prototype.slice.call(arguments));\n payload.format = this.formatOutput.bind(this);\n return payload;\n};\nmodule.exports = Method;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2016\n */\n\"use strict\";\nvar EventEmitter = require('eventemitter3');\n/**\n * This function generates a defer promise and adds eventEmitter functionality to it\n *\n * @method eventifiedPromise\n */\nvar PromiEvent = function PromiEvent(justPromise) {\n var resolve, reject, eventEmitter = new Promise(function () {\n resolve = arguments[0];\n reject = arguments[1];\n });\n if (justPromise) {\n return {\n resolve: resolve,\n reject: reject,\n eventEmitter: eventEmitter\n };\n }\n // get eventEmitter\n var emitter = new EventEmitter();\n // add eventEmitter to the promise\n eventEmitter._events = emitter._events;\n eventEmitter.emit = emitter.emit;\n eventEmitter.on = emitter.on;\n eventEmitter.once = emitter.once;\n eventEmitter.off = emitter.off;\n eventEmitter.listeners = emitter.listeners;\n eventEmitter.addListener = emitter.addListener;\n eventEmitter.removeListener = emitter.removeListener;\n eventEmitter.removeAllListeners = emitter.removeAllListeners;\n return {\n resolve: resolve,\n reject: reject,\n eventEmitter: eventEmitter\n };\n};\nPromiEvent.resolve = function (value) {\n var promise = PromiEvent(true);\n promise.resolve(value);\n return promise.eventEmitter;\n};\nmodule.exports = PromiEvent;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file batch.js\n * @author Marek Kotewicz \n * @date 2015\n */\n\"use strict\";\nvar Jsonrpc = require('./jsonrpc');\nvar errors = require('web3-core-helpers').errors;\nvar Batch = function (requestManager) {\n this.requestManager = requestManager;\n this.requests = [];\n};\n/**\n * Should be called to add create new request to batch request\n *\n * @method add\n * @param {Object} jsonrpc requet object\n */\nBatch.prototype.add = function (request) {\n this.requests.push(request);\n};\n/**\n * Should be called to execute batch request\n *\n * @method execute\n */\nBatch.prototype.execute = function () {\n var requests = this.requests;\n var sortResponses = this._sortResponses.bind(this);\n this.requestManager.sendBatch(requests, function (err, results) {\n results = sortResponses(results);\n requests.map(function (request, index) {\n return results[index] || {};\n }).forEach(function (result, index) {\n if (requests[index].callback) {\n if (result && result.error) {\n return requests[index].callback(errors.ErrorResponse(result));\n }\n if (!Jsonrpc.isValidResponse(result)) {\n return requests[index].callback(errors.InvalidResponse(result));\n }\n try {\n requests[index].callback(null, requests[index].format ? requests[index].format(result.result) : result.result);\n }\n catch (err) {\n requests[index].callback(err);\n }\n }\n });\n });\n};\n// Sort responses\nBatch.prototype._sortResponses = function (responses) {\n return (responses || []).sort((a, b) => a.id - b.id);\n};\nmodule.exports = Batch;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file givenProvider.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar givenProvider = null;\n// ADD GIVEN PROVIDER\n/* jshint ignore:start */\nvar global = typeof globalThis === 'object' ? globalThis : undefined;\nif (!global) {\n try {\n global = Function('return this')();\n }\n catch (e) {\n global = self;\n }\n}\n// EIP-1193: window.ethereum\nif (typeof global.ethereum !== 'undefined') {\n givenProvider = global.ethereum;\n // Legacy web3.currentProvider\n}\nelse if (typeof global.web3 !== 'undefined' && global.web3.currentProvider) {\n if (global.web3.currentProvider.sendAsync) {\n global.web3.currentProvider.send = global.web3.currentProvider.sendAsync;\n delete global.web3.currentProvider.sendAsync;\n }\n // if connection is 'ipcProviderWrapper', add subscription support\n if (!global.web3.currentProvider.on &&\n global.web3.currentProvider.connection &&\n global.web3.currentProvider.connection.constructor.name === 'ipcProviderWrapper') {\n global.web3.currentProvider.on = function (type, callback) {\n if (typeof callback !== 'function')\n throw new Error('The second parameter callback must be a function.');\n switch (type) {\n case 'data':\n this.connection.on('data', function (data) {\n var result = '';\n data = data.toString();\n try {\n result = JSON.parse(data);\n }\n catch (e) {\n return callback(new Error('Couldn\\'t parse response data' + data));\n }\n // notification\n if (!result.id && result.method.indexOf('_subscription') !== -1) {\n callback(null, result);\n }\n });\n break;\n default:\n this.connection.on(type, callback);\n break;\n }\n };\n }\n givenProvider = global.web3.currentProvider;\n}\n/* jshint ignore:end */\nmodule.exports = givenProvider;\n","/*\n This file is part of web3.js.\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nconst { callbackify } = require('util');\nvar errors = require('web3-core-helpers').errors;\nvar Jsonrpc = require('./jsonrpc.js');\nvar BatchManager = require('./batch.js');\nvar givenProvider = require('./givenProvider.js');\n/**\n * It's responsible for passing messages to providers\n * It's also responsible for polling the ethereum node for incoming messages\n * Default poll timeout is 1 second\n * Singleton\n *\n * @param {string|Object}provider\n * @param {Net.Socket} net\n *\n * @constructor\n */\nvar RequestManager = function RequestManager(provider, net) {\n this.provider = null;\n this.providers = RequestManager.providers;\n this.setProvider(provider, net);\n this.subscriptions = new Map();\n};\nRequestManager.givenProvider = givenProvider;\nRequestManager.providers = {\n WebsocketProvider: require('web3-providers-ws'),\n HttpProvider: require('web3-providers-http'),\n IpcProvider: require('web3-providers-ipc')\n};\n/**\n * Should be used to set provider of request manager\n *\n * @method setProvider\n *\n * @param {Object} provider\n * @param {net.Socket} net\n *\n * @returns void\n */\nRequestManager.prototype.setProvider = function (provider, net) {\n var _this = this;\n // autodetect provider\n if (provider && typeof provider === 'string' && this.providers) {\n // HTTP\n if (/^http(s)?:\\/\\//i.test(provider)) {\n provider = new this.providers.HttpProvider(provider);\n // WS\n }\n else if (/^ws(s)?:\\/\\//i.test(provider)) {\n provider = new this.providers.WebsocketProvider(provider);\n // IPC\n }\n else if (provider && typeof net === 'object' && typeof net.connect === 'function') {\n provider = new this.providers.IpcProvider(provider, net);\n }\n else if (provider) {\n throw new Error('Can\\'t autodetect provider for \"' + provider + '\"');\n }\n }\n // reset the old one before changing, if still connected\n if (this.provider && this.provider.connected)\n this.clearSubscriptions();\n this.provider = provider || null;\n // listen to incoming notifications\n if (this.provider && this.provider.on) {\n if (typeof provider.request === 'function') { // EIP-1193 provider\n this.provider.on('message', function (payload) {\n if (payload && payload.type === 'eth_subscription' && payload.data) {\n const data = payload.data;\n if (data.subscription && _this.subscriptions.has(data.subscription)) {\n _this.subscriptions.get(data.subscription).callback(null, data.result);\n }\n }\n });\n }\n else { // legacy provider subscription event\n this.provider.on('data', function data(result, deprecatedResult) {\n result = result || deprecatedResult; // this is for possible old providers, which may had the error first handler\n // if result is a subscription, call callback for that subscription\n if (result.method && result.params && result.params.subscription && _this.subscriptions.has(result.params.subscription)) {\n _this.subscriptions.get(result.params.subscription).callback(null, result.params.result);\n }\n });\n }\n // resubscribe if the provider has reconnected\n this.provider.on('connect', function connect() {\n _this.subscriptions.forEach(function (subscription) {\n subscription.subscription.resubscribe();\n });\n });\n // notify all subscriptions about the error condition\n this.provider.on('error', function error(error) {\n _this.subscriptions.forEach(function (subscription) {\n subscription.callback(error);\n });\n });\n // notify all subscriptions about bad close conditions\n const disconnect = function disconnect(event) {\n if (!_this._isCleanCloseEvent(event) || _this._isIpcCloseError(event)) {\n _this.subscriptions.forEach(function (subscription) {\n subscription.callback(errors.ConnectionCloseError(event));\n _this.subscriptions.delete(subscription.subscription.id);\n });\n if (_this.provider && _this.provider.emit) {\n _this.provider.emit('error', errors.ConnectionCloseError(event));\n }\n }\n if (_this.provider && _this.provider.emit) {\n _this.provider.emit('end', event);\n }\n };\n this.provider.on('disconnect', disconnect);\n // TODO add end, timeout??\n }\n};\n/**\n * Asynchronously send request to provider.\n * Prefers to use the `request` method available on the provider as specified in [EIP-1193](https://eips.ethereum.org/EIPS/eip-1193).\n * If `request` is not available, falls back to `sendAsync` and `send` respectively.\n * @method send\n * @param {Object} data\n * @param {Function} callback\n */\nRequestManager.prototype.send = function (data, callback) {\n callback = callback || function () { };\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n const { method, params } = data;\n const jsonrpcPayload = Jsonrpc.toPayload(method, params);\n const jsonrpcResultCallback = this._jsonrpcResultCallback(callback, jsonrpcPayload);\n if (this.provider.request) {\n const callbackRequest = callbackify(this.provider.request.bind(this.provider));\n const requestArgs = { method, params };\n callbackRequest(requestArgs, callback);\n }\n else if (this.provider.sendAsync) {\n this.provider.sendAsync(jsonrpcPayload, jsonrpcResultCallback);\n }\n else if (this.provider.send) {\n this.provider.send(jsonrpcPayload, jsonrpcResultCallback);\n }\n else {\n throw new Error('Provider does not have a request or send method to use.');\n }\n};\n/**\n * Asynchronously send batch request.\n * Only works if provider supports batch methods through `sendAsync` or `send`.\n * @method sendBatch\n * @param {Array} data - array of payload objects\n * @param {Function} callback\n */\nRequestManager.prototype.sendBatch = function (data, callback) {\n if (!this.provider) {\n return callback(errors.InvalidProvider());\n }\n var payload = Jsonrpc.toBatchPayload(data);\n this.provider[this.provider.sendAsync ? 'sendAsync' : 'send'](payload, function (err, results) {\n if (err) {\n return callback(err);\n }\n if (!Array.isArray(results)) {\n return callback(errors.InvalidResponse(results));\n }\n callback(null, results);\n });\n};\n/**\n * Waits for notifications\n *\n * @method addSubscription\n * @param {Subscription} subscription the subscription\n * @param {String} type the subscription namespace (eth, personal, etc)\n * @param {Function} callback the callback to call for incoming notifications\n */\nRequestManager.prototype.addSubscription = function (subscription, callback) {\n if (this.provider.on) {\n this.subscriptions.set(subscription.id, {\n callback: callback,\n subscription: subscription\n });\n }\n else {\n throw new Error('The provider doesn\\'t support subscriptions: ' + this.provider.constructor.name);\n }\n};\n/**\n * Waits for notifications\n *\n * @method removeSubscription\n * @param {String} id the subscription id\n * @param {Function} callback fired once the subscription is removed\n */\nRequestManager.prototype.removeSubscription = function (id, callback) {\n if (this.subscriptions.has(id)) {\n var type = this.subscriptions.get(id).subscription.options.type;\n // remove subscription first to avoid reentry\n this.subscriptions.delete(id);\n // then, try to actually unsubscribe\n this.send({\n method: type + '_unsubscribe',\n params: [id]\n }, callback);\n return;\n }\n if (typeof callback === 'function') {\n // call the callback if the subscription was already removed\n callback(null);\n }\n};\n/**\n * Should be called to reset the subscriptions\n *\n * @method reset\n *\n * @returns {boolean}\n */\nRequestManager.prototype.clearSubscriptions = function (keepIsSyncing) {\n try {\n var _this = this;\n // uninstall all subscriptions\n if (this.subscriptions.size > 0) {\n this.subscriptions.forEach(function (value, id) {\n if (!keepIsSyncing || value.name !== 'syncing')\n _this.removeSubscription(id);\n });\n }\n // reset notification callbacks etc.\n if (this.provider.reset)\n this.provider.reset();\n return true;\n }\n catch (e) {\n throw new Error(`Error while clearing subscriptions: ${e}`);\n }\n};\n/**\n * Evaluates WS close event\n *\n * @method _isCleanClose\n *\n * @param {CloseEvent | boolean} event WS close event or exception flag\n *\n * @returns {boolean}\n */\nRequestManager.prototype._isCleanCloseEvent = function (event) {\n return typeof event === 'object' && ([1000].includes(event.code) || event.wasClean === true);\n};\n/**\n * Detects Ipc close error. The node.net module emits ('close', isException)\n *\n * @method _isIpcCloseError\n *\n * @param {CloseEvent | boolean} event WS close event or exception flag\n *\n * @returns {boolean}\n */\nRequestManager.prototype._isIpcCloseError = function (event) {\n return typeof event === 'boolean' && event;\n};\n/**\n * The jsonrpc result callback for RequestManager.send\n *\n * @method _jsonrpcResultCallback\n *\n * @param {Function} callback the callback to use\n * @param {Object} payload the jsonrpc payload\n *\n * @returns {Function} return callback of form (err, result)\n *\n */\nRequestManager.prototype._jsonrpcResultCallback = function (callback, payload) {\n return function (err, result) {\n if (result && result.id && payload.id !== result.id) {\n return callback(new Error(`Wrong response id ${result.id} (expected: ${payload.id}) in ${JSON.stringify(payload)}`));\n }\n if (err) {\n return callback(err);\n }\n if (result && result.error) {\n return callback(errors.ErrorResponse(result));\n }\n if (!Jsonrpc.isValidResponse(result)) {\n return callback(errors.InvalidResponse(result));\n }\n callback(null, result.result);\n };\n};\nmodule.exports = {\n Manager: RequestManager,\n BatchManager: BatchManager\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file jsonrpc.js\n * @authors:\n * Fabian Vogelsteller \n * Marek Kotewicz \n * Aaron Kumavis \n * @date 2015\n */\n\"use strict\";\n// Initialize Jsonrpc as a simple object with utility functions.\nvar Jsonrpc = {\n messageId: 0\n};\n/**\n * Should be called to valid json create payload object\n *\n * @method toPayload\n * @param {Function} method of jsonrpc call, required\n * @param {Array} params, an array of method params, optional\n * @returns {Object} valid jsonrpc payload object\n */\nJsonrpc.toPayload = function (method, params) {\n if (!method) {\n throw new Error('JSONRPC method should be specified for params: \"' + JSON.stringify(params) + '\"!');\n }\n // advance message ID\n Jsonrpc.messageId++;\n return {\n jsonrpc: '2.0',\n id: Jsonrpc.messageId,\n method: method,\n params: params || []\n };\n};\n/**\n * Should be called to check if jsonrpc response is valid\n *\n * @method isValidResponse\n * @param {Object}\n * @returns {Boolean} true if response is valid, otherwise false\n */\nJsonrpc.isValidResponse = function (response) {\n return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response);\n function validateSingleMessage(message) {\n return !!message &&\n !message.error &&\n message.jsonrpc === '2.0' &&\n (typeof message.id === 'number' || typeof message.id === 'string') &&\n message.result !== undefined; // only undefined is not valid json object\n }\n};\n/**\n * Should be called to create batch payload object\n *\n * @method toBatchPayload\n * @param {Array} messages, an array of objects with method (required) and params (optional) fields\n * @returns {Array} batch payload\n */\nJsonrpc.toBatchPayload = function (messages) {\n return messages.map(function (message) {\n return Jsonrpc.toPayload(message.method, message.params);\n });\n};\nmodule.exports = Jsonrpc;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar Subscription = require('./subscription.js');\nvar Subscriptions = function Subscriptions(options) {\n this.name = options.name;\n this.type = options.type;\n this.subscriptions = options.subscriptions || {};\n this.requestManager = null;\n};\nSubscriptions.prototype.setRequestManager = function (rm) {\n this.requestManager = rm;\n};\nSubscriptions.prototype.attachToObject = function (obj) {\n var func = this.buildCall();\n var name = this.name.split('.');\n if (name.length > 1) {\n obj[name[0]] = obj[name[0]] || {};\n obj[name[0]][name[1]] = func;\n }\n else {\n obj[name[0]] = func;\n }\n};\nSubscriptions.prototype.buildCall = function () {\n var _this = this;\n return function () {\n if (!_this.subscriptions[arguments[0]]) {\n console.warn('Subscription ' + JSON.stringify(arguments[0]) + ' doesn\\'t exist. Subscribing anyway.');\n }\n var subscription = new Subscription({\n subscription: _this.subscriptions[arguments[0]] || {},\n requestManager: _this.requestManager,\n type: _this.type\n });\n return subscription.subscribe.apply(subscription, arguments);\n };\n};\nmodule.exports = {\n subscriptions: Subscriptions,\n subscription: Subscription\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file subscription.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar errors = require('web3-core-helpers').errors;\nvar EventEmitter = require('eventemitter3');\nvar formatters = require('web3-core-helpers').formatters;\nfunction identity(value) {\n return value;\n}\nfunction Subscription(options) {\n EventEmitter.call(this);\n this.id = null;\n this.callback = identity;\n this.arguments = null;\n this.lastBlock = null; // \"from\" block tracker for backfilling events on reconnection\n this.options = {\n subscription: options.subscription,\n type: options.type,\n requestManager: options.requestManager\n };\n}\n// INHERIT\nSubscription.prototype = Object.create(EventEmitter.prototype);\nSubscription.prototype.constructor = Subscription;\n/**\n * Should be used to extract callback from array of arguments. Modifies input param\n *\n * @method extractCallback\n * @param {Array} arguments\n * @return {Function|Null} callback, if exists\n */\nSubscription.prototype._extractCallback = function (args) {\n if (typeof args[args.length - 1] === 'function') {\n return args.pop(); // modify the args array!\n }\n};\n/**\n * Should be called to check if the number of arguments is correct\n *\n * @method validateArgs\n * @param {Array} arguments\n * @throws {Error} if it is not\n */\nSubscription.prototype._validateArgs = function (args) {\n var subscription = this.options.subscription;\n if (!subscription)\n subscription = {};\n if (!subscription.params)\n subscription.params = 0;\n if (args.length !== subscription.params) {\n throw errors.InvalidNumberOfParams(args.length, subscription.params, subscription.subscriptionName);\n }\n};\n/**\n * Should be called to format input args of method\n *\n * @method formatInput\n * @param {Array}\n * @return {Array}\n */\nSubscription.prototype._formatInput = function (args) {\n var subscription = this.options.subscription;\n if (!subscription) {\n return args;\n }\n if (!subscription.inputFormatter) {\n return args;\n }\n var formattedArgs = subscription.inputFormatter.map(function (formatter, index) {\n return formatter ? formatter(args[index]) : args[index];\n });\n return formattedArgs;\n};\n/**\n * Should be called to format output(result) of method\n *\n * @method formatOutput\n * @param result {Object}\n * @return {Object}\n */\nSubscription.prototype._formatOutput = function (result) {\n var subscription = this.options.subscription;\n return (subscription && subscription.outputFormatter && result) ? subscription.outputFormatter(result) : result;\n};\n/**\n * Should create payload from given input args\n *\n * @method toPayload\n * @param {Array} args\n * @return {Object}\n */\nSubscription.prototype._toPayload = function (args) {\n var params = [];\n this.callback = this._extractCallback(args) || identity;\n if (!this.subscriptionMethod) {\n this.subscriptionMethod = args.shift();\n // replace subscription with given name\n if (this.options.subscription.subscriptionName) {\n this.subscriptionMethod = this.options.subscription.subscriptionName;\n }\n }\n if (!this.arguments) {\n this.arguments = this._formatInput(args);\n this._validateArgs(this.arguments);\n args = []; // make empty after validation\n }\n // re-add subscriptionName\n params.push(this.subscriptionMethod);\n params = params.concat(this.arguments);\n if (args.length) {\n throw new Error('Only a callback is allowed as parameter on an already instantiated subscription.');\n }\n return {\n method: this.options.type + '_subscribe',\n params: params\n };\n};\n/**\n * Unsubscribes and clears callbacks\n *\n * @method unsubscribe\n * @return {Object}\n */\nSubscription.prototype.unsubscribe = function (callback) {\n this.options.requestManager.removeSubscription(this.id, callback);\n this.id = null;\n this.lastBlock = null;\n this.removeAllListeners();\n};\n/**\n * Subscribes and watches for changes\n *\n * @method subscribe\n * @param {String} subscription the subscription\n * @param {Object} options the options object with address topics and fromBlock\n * @return {Object}\n */\nSubscription.prototype.subscribe = function () {\n var _this = this;\n var args = Array.prototype.slice.call(arguments);\n var payload = this._toPayload(args);\n if (!payload) {\n return this;\n }\n // throw error, if provider is not set\n if (!this.options.requestManager.provider) {\n setTimeout(function () {\n var err1 = new Error('No provider set.');\n _this.callback(err1, null, _this);\n _this.emit('error', err1);\n }, 0);\n return this;\n }\n // throw error, if provider doesnt support subscriptions\n if (!this.options.requestManager.provider.on) {\n setTimeout(function () {\n var err2 = new Error('The current provider doesn\\'t support subscriptions: ' +\n _this.options.requestManager.provider.constructor.name);\n _this.callback(err2, null, _this);\n _this.emit('error', err2);\n }, 0);\n return this;\n }\n // Re-subscription only: continue fetching from the last block we received.\n // a dropped connection may have resulted in gaps in the logs...\n if (this.lastBlock && !!this.options.params && typeof this.options.params === 'object') {\n payload.params[1] = this.options.params;\n payload.params[1].fromBlock = formatters.inputBlockNumberFormatter(this.lastBlock + 1);\n }\n // if id is there unsubscribe first\n if (this.id) {\n this.unsubscribe();\n }\n // store the params in the options object\n this.options.params = payload.params[1];\n // get past logs, if fromBlock is available\n if (payload.params[0] === 'logs' && !!payload.params[1] && typeof payload.params[1] === 'object' && payload.params[1].hasOwnProperty('fromBlock') && isFinite(payload.params[1].fromBlock)) {\n // send the subscription request\n // copy the params to avoid race-condition with deletion below this block\n var blockParams = Object.assign({}, payload.params[1]);\n this.options.requestManager.send({\n method: 'eth_getLogs',\n params: [blockParams]\n }, function (err, logs) {\n if (!err) {\n logs.forEach(function (log) {\n var output = _this._formatOutput(log);\n _this.callback(null, output, _this);\n _this.emit('data', output);\n });\n // TODO subscribe here? after the past logs?\n }\n else {\n setTimeout(function () {\n _this.callback(err, null, _this);\n _this.emit('error', err);\n }, 0);\n }\n });\n }\n // create subscription\n // TODO move to separate function? so that past logs can go first?\n if (typeof payload.params[1] === 'object')\n delete payload.params[1].fromBlock;\n this.options.requestManager.send(payload, function (err, result) {\n if (!err && result) {\n _this.id = result;\n _this.method = payload.params[0];\n // call callback on notifications\n _this.options.requestManager.addSubscription(_this, function (error, result) {\n if (!error) {\n if (!Array.isArray(result)) {\n result = [result];\n }\n result.forEach(function (resultItem) {\n var output = _this._formatOutput(resultItem);\n // Track current block (for gaps introduced by dropped connections)\n _this.lastBlock = !!output && typeof output === 'object' ? output.blockNumber : null;\n if (typeof _this.options.subscription.subscriptionHandler === 'function') {\n return _this.options.subscription.subscriptionHandler.call(_this, output);\n }\n else {\n _this.emit('data', output);\n }\n // call the callback, last so that unsubscribe there won't affect the emit above\n _this.callback(null, output, _this);\n });\n }\n else {\n _this.callback(error, false, _this);\n _this.emit('error', error);\n }\n });\n _this.emit('connected', result);\n }\n else {\n setTimeout(function () {\n _this.callback(err, false, _this);\n _this.emit('error', err);\n }, 0);\n }\n });\n // return an object to cancel the subscription\n return this;\n};\n/**\n * Resubscribe\n *\n * @method resubscribe\n *\n * @returns {void}\n */\nSubscription.prototype.resubscribe = function () {\n this.options.requestManager.removeSubscription(this.id); // unsubscribe\n this.id = null;\n this.subscribe(this.callback);\n};\nmodule.exports = Subscription;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file extend.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar formatters = require('web3-core-helpers').formatters;\nvar Method = require('web3-core-method');\nvar utils = require('web3-utils');\nvar extend = function (pckg) {\n /* jshint maxcomplexity:5 */\n var ex = function (extension) {\n var extendedObject;\n if (extension.property) {\n if (!pckg[extension.property]) {\n pckg[extension.property] = {};\n }\n extendedObject = pckg[extension.property];\n }\n else {\n extendedObject = pckg;\n }\n if (extension.methods) {\n extension.methods.forEach(function (method) {\n if (!(method instanceof Method)) {\n method = new Method(method);\n }\n method.attachToObject(extendedObject);\n method.setRequestManager(pckg._requestManager);\n });\n }\n return pckg;\n };\n ex.formatters = formatters;\n ex.utils = utils;\n ex.Method = Method;\n return ex;\n};\nmodule.exports = extend;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\nconst requestManager = require(\"web3-core-requestmanager\");\nconst extend = require(\"./extend\");\nconst packageInit = (pkg, args) => {\n args = Array.prototype.slice.call(args);\n if (!pkg) {\n throw new Error('You need to instantiate using the \"new\" keyword.');\n }\n // make property of pkg._provider, which can properly set providers\n Object.defineProperty(pkg, 'currentProvider', {\n get: () => {\n return pkg._provider;\n },\n set: (value) => {\n return pkg.setProvider(value);\n },\n enumerable: true,\n configurable: true\n });\n // inherit from parent package or create a new RequestManager\n if (args[0] && args[0]._requestManager) {\n pkg._requestManager = args[0]._requestManager;\n }\n else {\n pkg._requestManager = new requestManager.Manager(args[0], args[1]);\n }\n // add givenProvider\n pkg.givenProvider = requestManager.Manager.givenProvider;\n pkg.providers = requestManager.Manager.providers;\n pkg._provider = pkg._requestManager.provider;\n // add SETPROVIDER function (don't overwrite if already existing)\n if (!pkg.setProvider) {\n pkg.setProvider = (provider, net) => {\n pkg._requestManager.setProvider(provider, net);\n pkg._provider = pkg._requestManager.provider;\n return true;\n };\n }\n pkg.setRequestManager = (manager) => {\n pkg._requestManager = manager;\n pkg._provider = manager.provider;\n };\n // attach batch request creation\n pkg.BatchRequest = requestManager.BatchManager.bind(null, pkg._requestManager);\n // attach extend function\n pkg.extend = extend(pkg);\n};\nconst addProviders = (pkg) => {\n pkg.givenProvider = requestManager.Manager.givenProvider;\n pkg.providers = requestManager.Manager.providers;\n};\nmodule.exports = {\n packageInit,\n addProviders\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file index.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2018\n */\nvar Buffer = require('buffer').Buffer;\nvar utils = require('web3-utils');\nvar EthersAbiCoder = require('@ethersproject/abi').AbiCoder;\nvar ParamType = require('@ethersproject/abi').ParamType;\nvar ethersAbiCoder = new EthersAbiCoder(function (type, value) {\n if (type.match(/^u?int/) && !Array.isArray(value) && (!(!!value && typeof value === 'object') || value.constructor.name !== 'BN')) {\n return value.toString();\n }\n return value;\n});\n// result method\nfunction Result() {\n}\n/**\n * ABICoder prototype should be used to encode/decode solidity params of any type\n */\nvar ABICoder = function () {\n};\n/**\n * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types.\n *\n * @method encodeFunctionSignature\n * @param {String|Object} functionName\n * @return {String} encoded function name\n */\nABICoder.prototype.encodeFunctionSignature = function (functionName) {\n if (typeof functionName === 'function' || typeof functionName === 'object' && functionName) {\n functionName = utils._jsonInterfaceMethodToString(functionName);\n }\n return utils.sha3(functionName).slice(0, 10);\n};\n/**\n * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including types.\n *\n * @method encodeEventSignature\n * @param {String|Object} functionName\n * @return {String} encoded function name\n */\nABICoder.prototype.encodeEventSignature = function (functionName) {\n if (typeof functionName === 'function' || typeof functionName === 'object' && functionName) {\n functionName = utils._jsonInterfaceMethodToString(functionName);\n }\n return utils.sha3(functionName);\n};\n/**\n * Should be used to encode plain param\n *\n * @method encodeParameter\n *\n * @param {String|Object} type\n * @param {any} param\n *\n * @return {String} encoded plain param\n */\nABICoder.prototype.encodeParameter = function (type, param) {\n return this.encodeParameters([type], [param]);\n};\n/**\n * Should be used to encode list of params\n *\n * @method encodeParameters\n *\n * @param {Array} types\n * @param {Array} params\n *\n * @return {String} encoded list of params\n */\nABICoder.prototype.encodeParameters = function (types, params) {\n var self = this;\n types = self.mapTypes(types);\n params = params.map(function (param, index) {\n let type = types[index];\n if (typeof type === 'object' && type.type) {\n // We may get a named type of shape {name, type}\n type = type.type;\n }\n param = self.formatParam(type, param);\n // Format params for tuples\n if (typeof type === 'string' && type.includes('tuple')) {\n const coder = ethersAbiCoder._getCoder(ParamType.from(type));\n const modifyParams = (coder, param) => {\n if (coder.name === 'array') {\n return param.map(p => modifyParams(ethersAbiCoder._getCoder(ParamType.from(coder.type.replace('[]', ''))), p));\n }\n coder.coders.forEach((c, i) => {\n if (c.name === 'tuple') {\n modifyParams(c, param[i]);\n }\n else {\n param[i] = self.formatParam(c.name, param[i]);\n }\n });\n };\n modifyParams(coder, param);\n }\n return param;\n });\n return ethersAbiCoder.encode(types, params);\n};\n/**\n * Map types if simplified format is used\n *\n * @method mapTypes\n * @param {Array} types\n * @return {Array}\n */\nABICoder.prototype.mapTypes = function (types) {\n var self = this;\n var mappedTypes = [];\n types.forEach(function (type) {\n // Remap `function` type params to bytes24 since Ethers does not\n // recognize former type. Solidity docs say `Function` is a bytes24\n // encoding the contract address followed by the function selector hash.\n if (typeof type === 'object' && type.type === 'function') {\n type = Object.assign({}, type, { type: \"bytes24\" });\n }\n if (self.isSimplifiedStructFormat(type)) {\n var structName = Object.keys(type)[0];\n mappedTypes.push(Object.assign(self.mapStructNameAndType(structName), {\n components: self.mapStructToCoderFormat(type[structName])\n }));\n return;\n }\n mappedTypes.push(type);\n });\n return mappedTypes;\n};\n/**\n * Check if type is simplified struct format\n *\n * @method isSimplifiedStructFormat\n * @param {string | Object} type\n * @returns {boolean}\n */\nABICoder.prototype.isSimplifiedStructFormat = function (type) {\n return typeof type === 'object' && typeof type.components === 'undefined' && typeof type.name === 'undefined';\n};\n/**\n * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used\n *\n * @method mapStructNameAndType\n * @param {string} structName\n * @return {{type: string, name: *}}\n */\nABICoder.prototype.mapStructNameAndType = function (structName) {\n var type = 'tuple';\n if (structName.indexOf('[]') > -1) {\n type = 'tuple[]';\n structName = structName.slice(0, -2);\n }\n return { type: type, name: structName };\n};\n/**\n * Maps the simplified format in to the expected format of the ABICoder\n *\n * @method mapStructToCoderFormat\n * @param {Object} struct\n * @return {Array}\n */\nABICoder.prototype.mapStructToCoderFormat = function (struct) {\n var self = this;\n var components = [];\n Object.keys(struct).forEach(function (key) {\n if (typeof struct[key] === 'object') {\n components.push(Object.assign(self.mapStructNameAndType(key), {\n components: self.mapStructToCoderFormat(struct[key])\n }));\n return;\n }\n components.push({\n name: key,\n type: struct[key]\n });\n });\n return components;\n};\n/**\n * Handle some formatting of params for backwards compatability with Ethers V4\n *\n * @method formatParam\n * @param {String} - type\n * @param {any} - param\n * @return {any} - The formatted param\n */\nABICoder.prototype.formatParam = function (type, param) {\n const paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\n const paramTypeBytesArray = new RegExp(/^bytes([0-9]*)\\[\\]$/);\n const paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\n const paramTypeNumberArray = new RegExp(/^(u?int)([0-9]*)\\[\\]$/);\n // Format BN to string\n if (utils.isBN(param) || utils.isBigNumber(param)) {\n return param.toString(10);\n }\n if (type.match(paramTypeBytesArray) || type.match(paramTypeNumberArray)) {\n return param.map(p => this.formatParam(type.replace('[]', ''), p));\n }\n // Format correct width for u?int[0-9]*\n let match = type.match(paramTypeNumber);\n if (match) {\n let size = parseInt(match[2] || \"256\");\n if (size / 8 < param.length) {\n // pad to correct bit width\n param = utils.leftPad(param, size);\n }\n }\n // Format correct length for bytes[0-9]+\n match = type.match(paramTypeBytes);\n if (match) {\n if (Buffer.isBuffer(param)) {\n param = utils.toHex(param);\n }\n // format to correct length\n let size = parseInt(match[1]);\n if (size) {\n let maxSize = size * 2;\n if (param.substring(0, 2) === '0x') {\n maxSize += 2;\n }\n if (param.length < maxSize) {\n // pad to correct length\n param = utils.rightPad(param, size * 2);\n }\n }\n // format odd-length bytes to even-length\n if (param.length % 2 === 1) {\n param = '0x0' + param.substring(2);\n }\n }\n return param;\n};\n/**\n * Encodes a function call from its json interface and parameters.\n *\n * @method encodeFunctionCall\n * @param {Array} jsonInterface\n * @param {Array} params\n * @return {String} The encoded ABI for this function call\n */\nABICoder.prototype.encodeFunctionCall = function (jsonInterface, params) {\n return this.encodeFunctionSignature(jsonInterface) + this.encodeParameters(jsonInterface.inputs, params).replace('0x', '');\n};\n/**\n * Should be used to decode bytes to plain param\n *\n * @method decodeParameter\n * @param {String} type\n * @param {String} bytes\n * @return {Object} plain param\n */\nABICoder.prototype.decodeParameter = function (type, bytes) {\n return this.decodeParameters([type], bytes)[0];\n};\n/**\n * Should be used to decode list of params\n *\n * @method decodeParameter\n * @param {Array} outputs\n * @param {String} bytes\n * @return {Array} array of plain params\n */\nABICoder.prototype.decodeParameters = function (outputs, bytes) {\n return this.decodeParametersWith(outputs, bytes, false);\n};\n/**\n * Should be used to decode list of params\n *\n * @method decodeParameter\n * @param {Array} outputs\n * @param {String} bytes\n * @param {Boolean} loose\n * @return {Array} array of plain params\n */\nABICoder.prototype.decodeParametersWith = function (outputs, bytes, loose) {\n if (outputs.length > 0 && (!bytes || bytes === '0x' || bytes === '0X')) {\n throw new Error('Returned values aren\\'t valid, did it run Out of Gas? ' +\n 'You might also see this error if you are not using the ' +\n 'correct ABI for the contract you are retrieving data from, ' +\n 'requesting data from a block number that does not exist, ' +\n 'or querying a node which is not fully synced.');\n }\n var res = ethersAbiCoder.decode(this.mapTypes(outputs), '0x' + bytes.replace(/0x/i, ''), loose);\n var returnValue = new Result();\n returnValue.__length__ = 0;\n outputs.forEach(function (output, i) {\n var decodedValue = res[returnValue.__length__];\n const isStringObject = typeof output === 'object' && output.type && output.type === 'string';\n const isStringType = typeof output === 'string' && output === 'string';\n // only convert `0x` to null if it's not string value\n decodedValue = (decodedValue === '0x' && !isStringObject && !isStringType) ? null : decodedValue;\n returnValue[i] = decodedValue;\n if ((typeof output === 'function' || !!output && typeof output === 'object') && output.name) {\n returnValue[output.name] = decodedValue;\n }\n returnValue.__length__++;\n });\n return returnValue;\n};\n/**\n * Decodes events non- and indexed parameters.\n *\n * @method decodeLog\n * @param {Object} inputs\n * @param {String} data\n * @param {Array} topics\n * @return {Array} array of plain params\n */\nABICoder.prototype.decodeLog = function (inputs, data, topics) {\n var _this = this;\n topics = Array.isArray(topics) ? topics : [topics];\n data = data || '';\n var notIndexedInputs = [];\n var indexedParams = [];\n var topicCount = 0;\n // TODO check for anonymous logs?\n inputs.forEach(function (input, i) {\n if (input.indexed) {\n indexedParams[i] = (['bool', 'int', 'uint', 'address', 'fixed', 'ufixed'].find(function (staticType) {\n return input.type.indexOf(staticType) !== -1;\n })) ? _this.decodeParameter(input.type, topics[topicCount]) : topics[topicCount];\n topicCount++;\n }\n else {\n notIndexedInputs[i] = input;\n }\n });\n var nonIndexedData = data;\n var notIndexedParams = (nonIndexedData) ? this.decodeParametersWith(notIndexedInputs, nonIndexedData, true) : [];\n var returnValue = new Result();\n returnValue.__length__ = 0;\n inputs.forEach(function (res, i) {\n returnValue[i] = (res.type === 'string') ? '' : null;\n if (typeof notIndexedParams[i] !== 'undefined') {\n returnValue[i] = notIndexedParams[i];\n }\n if (typeof indexedParams[i] !== 'undefined') {\n returnValue[i] = indexedParams[i];\n }\n if (res.name) {\n returnValue[res.name] = returnValue[i];\n }\n returnValue.__length__++;\n });\n return returnValue;\n};\nvar coder = new ABICoder();\nmodule.exports = coder;\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file accounts.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n'use strict';\nvar core = require('web3-core');\nvar Method = require('web3-core-method');\nvar Account = require('eth-lib/lib/account');\nvar cryp = (typeof global === 'undefined') ? require('crypto-browserify') : require('crypto');\nvar scrypt = require('scrypt-js');\nvar uuid = require('uuid');\nvar utils = require('web3-utils');\nvar helpers = require('web3-core-helpers');\nvar { TransactionFactory } = require('@ethereumjs/tx');\nvar Common = require('@ethereumjs/common').default;\nvar HardForks = require('@ethereumjs/common').Hardfork;\nvar ethereumjsUtil = require('ethereumjs-util');\nvar isNot = function (value) {\n return (typeof value === 'undefined') || value === null;\n};\nvar isExist = function (value) {\n return (typeof value !== 'undefined') && value !== null;\n};\nvar Accounts = function Accounts() {\n var _this = this;\n // sets _requestmanager\n core.packageInit(this, arguments);\n // remove unecessary core functions\n delete this.BatchRequest;\n delete this.extend;\n var _ethereumCall = [\n new Method({\n name: 'getNetworkId',\n call: 'net_version',\n params: 0,\n outputFormatter: parseInt\n }),\n new Method({\n name: 'getChainId',\n call: 'eth_chainId',\n params: 0,\n outputFormatter: utils.hexToNumber\n }),\n new Method({\n name: 'getGasPrice',\n call: 'eth_gasPrice',\n params: 0\n }),\n new Method({\n name: 'getTransactionCount',\n call: 'eth_getTransactionCount',\n params: 2,\n inputFormatter: [function (address) {\n if (utils.isAddress(address)) {\n return address;\n }\n else {\n throw new Error('Address ' + address + ' is not a valid address to get the \"transactionCount\".');\n }\n }, function () {\n return 'latest';\n }]\n }),\n new Method({\n name: 'getBlockByNumber',\n call: 'eth_getBlockByNumber',\n params: 2,\n inputFormatter: [function (blockNumber) {\n return blockNumber ? utils.toHex(blockNumber) : 'latest';\n }, function () {\n return false;\n }]\n }),\n ];\n // attach methods to this._ethereumCall\n this._ethereumCall = {};\n _ethereumCall.forEach((method) => {\n method.attachToObject(_this._ethereumCall);\n method.setRequestManager(_this._requestManager);\n });\n this.wallet = new Wallet(this);\n};\nAccounts.prototype._addAccountFunctions = function (account) {\n var _this = this;\n // add sign functions\n account.signTransaction = function signTransaction(tx, callback) {\n return _this.signTransaction(tx, account.privateKey, callback);\n };\n account.sign = function sign(data) {\n return _this.sign(data, account.privateKey);\n };\n account.encrypt = function encrypt(password, options) {\n return _this.encrypt(account.privateKey, password, options);\n };\n return account;\n};\nAccounts.prototype.create = function create(entropy) {\n return this._addAccountFunctions(Account.create(entropy || utils.randomHex(32)));\n};\nAccounts.prototype.privateKeyToAccount = function privateKeyToAccount(privateKey, ignoreLength) {\n if (!privateKey.startsWith('0x')) {\n privateKey = '0x' + privateKey;\n }\n // 64 hex characters + hex-prefix\n if (!ignoreLength && privateKey.length !== 66) {\n throw new Error(\"Private key must be 32 bytes long\");\n }\n return this._addAccountFunctions(Account.fromPrivate(privateKey));\n};\nAccounts.prototype.signTransaction = function signTransaction(tx, privateKey, callback) {\n var _this = this, error = false, transactionOptions = {}, hasTxSigningOptions = !!(tx && ((tx.chain && tx.hardfork) || tx.common));\n callback = callback || function () { };\n if (!tx) {\n error = new Error('No transaction object given!');\n callback(error);\n return Promise.reject(error);\n }\n if (isExist(tx.common) && isNot(tx.common.customChain)) {\n error = new Error('If tx.common is provided it must have tx.common.customChain');\n callback(error);\n return Promise.reject(error);\n }\n if (isExist(tx.common) && isNot(tx.common.customChain.chainId)) {\n error = new Error('If tx.common is provided it must have tx.common.customChain and tx.common.customChain.chainId');\n callback(error);\n return Promise.reject(error);\n }\n if (isExist(tx.common) && isExist(tx.common.customChain.chainId) && isExist(tx.chainId) && tx.chainId !== tx.common.customChain.chainId) {\n error = new Error('Chain Id doesnt match in tx.chainId tx.common.customChain.chainId');\n callback(error);\n return Promise.reject(error);\n }\n function signed(tx) {\n const error = _validateTransactionForSigning(tx);\n if (error) {\n callback(error);\n return Promise.reject(error);\n }\n try {\n var transaction = helpers.formatters.inputCallFormatter(Object.assign({}, tx));\n transaction.data = transaction.data || '0x';\n transaction.value = transaction.value || '0x';\n transaction.gasLimit = transaction.gasLimit || transaction.gas;\n if (transaction.type === '0x1' && transaction.accessList === undefined)\n transaction.accessList = [];\n // Because tx has no @ethereumjs/tx signing options we use fetched vals.\n if (!hasTxSigningOptions) {\n transactionOptions.common = Common.forCustomChain('mainnet', {\n name: 'custom-network',\n networkId: transaction.networkId,\n chainId: transaction.chainId\n }, transaction.hardfork || HardForks.London);\n delete transaction.networkId;\n }\n else {\n if (transaction.common) {\n transactionOptions.common = Common.forCustomChain(transaction.common.baseChain || 'mainnet', {\n name: transaction.common.customChain.name || 'custom-network',\n networkId: transaction.common.customChain.networkId,\n chainId: transaction.common.customChain.chainId\n }, transaction.common.hardfork || HardForks.London);\n delete transaction.common;\n }\n if (transaction.chain) {\n transactionOptions.chain = transaction.chain;\n delete transaction.chain;\n }\n if (transaction.hardfork) {\n transactionOptions.hardfork = transaction.hardfork;\n delete transaction.hardfork;\n }\n }\n if (privateKey.startsWith('0x')) {\n privateKey = privateKey.substring(2);\n }\n var ethTx = TransactionFactory.fromTxData(transaction, transactionOptions);\n var signedTx = ethTx.sign(Buffer.from(privateKey, 'hex'));\n var validationErrors = signedTx.validate(true);\n if (validationErrors.length > 0) {\n let errorString = 'Signer Error: ';\n for (const validationError of validationErrors) {\n errorString += `${errorString} ${validationError}.`;\n }\n throw new Error(errorString);\n }\n var rlpEncoded = signedTx.serialize().toString('hex');\n var rawTransaction = '0x' + rlpEncoded;\n var transactionHash = utils.keccak256(rawTransaction);\n var result = {\n messageHash: '0x' + Buffer.from(signedTx.getMessageToSign(true)).toString('hex'),\n v: '0x' + signedTx.v.toString('hex'),\n r: '0x' + signedTx.r.toString('hex'),\n s: '0x' + signedTx.s.toString('hex'),\n rawTransaction: rawTransaction,\n transactionHash: transactionHash\n };\n callback(null, result);\n return result;\n }\n catch (e) {\n callback(e);\n return Promise.reject(e);\n }\n }\n tx.type = _handleTxType(tx);\n // Resolve immediately if nonce, chainId, price and signing options are provided\n if (tx.nonce !== undefined &&\n tx.chainId !== undefined &&\n (tx.gasPrice !== undefined ||\n (tx.maxFeePerGas !== undefined &&\n tx.maxPriorityFeePerGas !== undefined)) &&\n hasTxSigningOptions) {\n return Promise.resolve(signed(tx));\n }\n // Otherwise, get the missing info from the Ethereum Node\n return Promise.all([\n ((isNot(tx.common) || isNot(tx.common.customChain.chainId)) ? //tx.common.customChain.chainId is not optional inside tx.common if tx.common is provided\n (isNot(tx.chainId) ? _this._ethereumCall.getChainId() : tx.chainId)\n : undefined),\n isNot(tx.nonce) ? _this._ethereumCall.getTransactionCount(_this.privateKeyToAccount(privateKey).address) : tx.nonce,\n isNot(hasTxSigningOptions) ? _this._ethereumCall.getNetworkId() : 1,\n _handleTxPricing(_this, tx)\n ]).then(function (args) {\n const [txchainId, txnonce, txnetworkId, txgasInfo] = args;\n if ((isNot(txchainId) && isNot(tx.common) && isNot(tx.common.customChain.chainId)) || isNot(txnonce) || isNot(txnetworkId) || isNot(txgasInfo)) {\n throw new Error('One of the values \"chainId\", \"networkId\", \"gasPrice\", or \"nonce\" couldn\\'t be fetched: ' + JSON.stringify(args));\n }\n return signed({\n ...tx,\n ...((isNot(tx.common) || isNot(tx.common.customChain.chainId)) ? { chainId: txchainId } : {}),\n nonce: txnonce,\n networkId: txnetworkId,\n ...txgasInfo // Will either be gasPrice or maxFeePerGas and maxPriorityFeePerGas\n });\n });\n};\nfunction _validateTransactionForSigning(tx) {\n if (tx.common && (tx.chain && tx.hardfork)) {\n return new Error('Please provide the @ethereumjs/common object or the chain and hardfork property but not all together.');\n }\n if ((tx.chain && !tx.hardfork) || (tx.hardfork && !tx.chain)) {\n return new Error('When specifying chain and hardfork, both values must be defined. ' +\n 'Received \"chain\": ' + tx.chain + ', \"hardfork\": ' + tx.hardfork);\n }\n if ((!tx.gas && !tx.gasLimit) &&\n (!tx.maxPriorityFeePerGas && !tx.maxFeePerGas)) {\n return new Error('\"gas\" is missing');\n }\n if (tx.gas && tx.gasPrice) {\n if (tx.gas < 0 || tx.gasPrice < 0) {\n return new Error('Gas or gasPrice is lower than 0');\n }\n }\n else {\n if (tx.maxPriorityFeePerGas < 0 || tx.maxFeePerGas < 0) {\n return new Error('maxPriorityFeePerGas or maxFeePerGas is lower than 0');\n }\n }\n if (tx.nonce < 0 || tx.chainId < 0) {\n return new Error('Nonce or chainId is lower than 0');\n }\n return;\n}\nfunction _handleTxType(tx) {\n // Taken from https://github.com/ethers-io/ethers.js/blob/2a7ce0e72a1e0c9469e10392b0329e75e341cf18/packages/abstract-signer/src.ts/index.ts#L215\n const hasEip1559 = (tx.maxFeePerGas !== undefined || tx.maxPriorityFeePerGas !== undefined);\n let txType;\n if (tx.type !== undefined) {\n txType = utils.toHex(tx.type);\n }\n else if (tx.type === undefined && hasEip1559) {\n txType = '0x2';\n }\n if (tx.gasPrice !== undefined && (txType === '0x2' || hasEip1559))\n throw Error(\"eip-1559 transactions don't support gasPrice\");\n if ((txType === '0x1' || txType === '0x0') && hasEip1559)\n throw Error(\"pre-eip-1559 transaction don't support maxFeePerGas/maxPriorityFeePerGas\");\n if (hasEip1559 ||\n ((tx.common && tx.common.hardfork && tx.common.hardfork.toLowerCase() === HardForks.London) ||\n (tx.hardfork && tx.hardfork.toLowerCase() === HardForks.London))) {\n txType = '0x2';\n }\n else if (tx.accessList ||\n ((tx.common && tx.common.hardfork && tx.common.hardfork.toLowerCase() === HardForks.Berlin) ||\n (tx.hardfork && tx.hardfork.toLowerCase() === HardForks.Berlin))) {\n txType = '0x1';\n }\n return txType;\n}\nfunction _handleTxPricing(_this, tx) {\n return new Promise((resolve, reject) => {\n try {\n if ((tx.type === undefined || tx.type < '0x2')\n && tx.gasPrice !== undefined) {\n // Legacy transaction, return provided gasPrice\n resolve({ gasPrice: tx.gasPrice });\n }\n else {\n Promise.all([\n _this._ethereumCall.getBlockByNumber(),\n _this._ethereumCall.getGasPrice()\n ]).then(responses => {\n const [block, gasPrice] = responses;\n if ((tx.type === '0x2') &&\n block && block.baseFeePerGas) {\n // The network supports EIP-1559\n // Taken from https://github.com/ethers-io/ethers.js/blob/ba6854bdd5a912fe873d5da494cb5c62c190adde/packages/abstract-provider/src.ts/index.ts#L230\n let maxPriorityFeePerGas, maxFeePerGas;\n if (tx.gasPrice) {\n // Using legacy gasPrice property on an eip-1559 network,\n // so use gasPrice as both fee properties\n maxPriorityFeePerGas = tx.gasPrice;\n maxFeePerGas = tx.gasPrice;\n delete tx.gasPrice;\n }\n else {\n maxPriorityFeePerGas = tx.maxPriorityFeePerGas || '0x9502F900'; // 2.5 Gwei\n maxFeePerGas = tx.maxFeePerGas ||\n utils.toHex(utils.toBN(block.baseFeePerGas)\n .mul(utils.toBN(2))\n .add(utils.toBN(maxPriorityFeePerGas)));\n }\n resolve({ maxFeePerGas, maxPriorityFeePerGas });\n }\n else {\n if (tx.maxPriorityFeePerGas || tx.maxFeePerGas)\n throw Error(\"Network doesn't support eip-1559\");\n resolve({ gasPrice });\n }\n });\n }\n }\n catch (error) {\n reject(error);\n }\n });\n}\n/* jshint ignore:start */\nAccounts.prototype.recoverTransaction = function recoverTransaction(rawTx, txOptions = {}) {\n // Rely on EthereumJs/tx to determine the type of transaction\n const data = Buffer.from(rawTx.slice(2), \"hex\");\n const tx = TransactionFactory.fromSerializedData(data);\n //update checksum\n return utils.toChecksumAddress(tx.getSenderAddress().toString(\"hex\"));\n};\n/* jshint ignore:end */\nAccounts.prototype.hashMessage = function hashMessage(data) {\n var messageHex = utils.isHexStrict(data) ? data : utils.utf8ToHex(data);\n var messageBytes = utils.hexToBytes(messageHex);\n var messageBuffer = Buffer.from(messageBytes);\n var preamble = '\\x19Ethereum Signed Message:\\n' + messageBytes.length;\n var preambleBuffer = Buffer.from(preamble);\n var ethMessage = Buffer.concat([preambleBuffer, messageBuffer]);\n return ethereumjsUtil.bufferToHex(ethereumjsUtil.keccak256(ethMessage));\n};\nAccounts.prototype.sign = function sign(data, privateKey) {\n if (!privateKey.startsWith('0x')) {\n privateKey = '0x' + privateKey;\n }\n // 64 hex characters + hex-prefix\n if (privateKey.length !== 66) {\n throw new Error(\"Private key must be 32 bytes long\");\n }\n var hash = this.hashMessage(data);\n var signature = Account.sign(hash, privateKey);\n var vrs = Account.decodeSignature(signature);\n return {\n message: data,\n messageHash: hash,\n v: vrs[0],\n r: vrs[1],\n s: vrs[2],\n signature: signature\n };\n};\nAccounts.prototype.recover = function recover(message, signature, preFixed) {\n var args = [].slice.apply(arguments);\n if (!!message && typeof message === 'object') {\n return this.recover(message.messageHash, Account.encodeSignature([message.v, message.r, message.s]), true);\n }\n if (!preFixed) {\n message = this.hashMessage(message);\n }\n if (args.length >= 4) {\n preFixed = args.slice(-1)[0];\n preFixed = typeof preFixed === 'boolean' ? !!preFixed : false;\n return this.recover(message, Account.encodeSignature(args.slice(1, 4)), preFixed); // v, r, s\n }\n return Account.recover(message, signature);\n};\n// Taken from https://github.com/ethereumjs/ethereumjs-wallet\nAccounts.prototype.decrypt = function (v3Keystore, password, nonStrict) {\n /* jshint maxcomplexity: 10 */\n if (!(typeof password === 'string')) {\n throw new Error('No password given.');\n }\n var json = (!!v3Keystore && typeof v3Keystore === 'object') ? v3Keystore : JSON.parse(nonStrict ? v3Keystore.toLowerCase() : v3Keystore);\n if (json.version !== 3) {\n throw new Error('Not a valid V3 wallet');\n }\n var derivedKey;\n var kdfparams;\n if (json.crypto.kdf === 'scrypt') {\n kdfparams = json.crypto.kdfparams;\n // FIXME: support progress reporting callback\n derivedKey = scrypt.syncScrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen);\n }\n else if (json.crypto.kdf === 'pbkdf2') {\n kdfparams = json.crypto.kdfparams;\n if (kdfparams.prf !== 'hmac-sha256') {\n throw new Error('Unsupported parameters to PBKDF2');\n }\n derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256');\n }\n else {\n throw new Error('Unsupported key derivation scheme');\n }\n var ciphertext = Buffer.from(json.crypto.ciphertext, 'hex');\n var mac = utils.sha3(Buffer.from([...derivedKey.slice(16, 32), ...ciphertext])).replace('0x', '');\n if (mac !== json.crypto.mac) {\n throw new Error('Key derivation failed - possibly wrong password');\n }\n var decipher = cryp.createDecipheriv(json.crypto.cipher, derivedKey.slice(0, 16), Buffer.from(json.crypto.cipherparams.iv, 'hex'));\n var seed = '0x' + Buffer.from([...decipher.update(ciphertext), ...decipher.final()]).toString('hex');\n return this.privateKeyToAccount(seed, true);\n};\nAccounts.prototype.encrypt = function (privateKey, password, options) {\n /* jshint maxcomplexity: 20 */\n var account = this.privateKeyToAccount(privateKey, true);\n options = options || {};\n var salt = options.salt || cryp.randomBytes(32);\n var iv = options.iv || cryp.randomBytes(16);\n var derivedKey;\n var kdf = options.kdf || 'scrypt';\n var kdfparams = {\n dklen: options.dklen || 32,\n salt: salt.toString('hex')\n };\n if (kdf === 'pbkdf2') {\n kdfparams.c = options.c || 262144;\n kdfparams.prf = 'hmac-sha256';\n derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256');\n }\n else if (kdf === 'scrypt') {\n // FIXME: support progress reporting callback\n kdfparams.n = options.n || 8192; // 2048 4096 8192 16384\n kdfparams.r = options.r || 8;\n kdfparams.p = options.p || 1;\n derivedKey = scrypt.syncScrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen);\n }\n else {\n throw new Error('Unsupported kdf');\n }\n var cipher = cryp.createCipheriv(options.cipher || 'aes-128-ctr', derivedKey.slice(0, 16), iv);\n if (!cipher) {\n throw new Error('Unsupported cipher');\n }\n var ciphertext = Buffer.from([\n ...cipher.update(Buffer.from(account.privateKey.replace('0x', ''), 'hex')),\n ...cipher.final()\n ]);\n var mac = utils.sha3(Buffer.from([...derivedKey.slice(16, 32), ...ciphertext])).replace('0x', '');\n return {\n version: 3,\n id: uuid.v4({ random: options.uuid || cryp.randomBytes(16) }),\n address: account.address.toLowerCase().replace('0x', ''),\n crypto: {\n ciphertext: ciphertext.toString('hex'),\n cipherparams: {\n iv: iv.toString('hex')\n },\n cipher: options.cipher || 'aes-128-ctr',\n kdf: kdf,\n kdfparams: kdfparams,\n mac: mac.toString('hex')\n }\n };\n};\n// Note: this is trying to follow closely the specs on\n// http://web3js.readthedocs.io/en/1.0/web3-eth-accounts.html\nfunction Wallet(accounts) {\n this._accounts = accounts;\n this.length = 0;\n this.defaultKeyName = 'web3js_wallet';\n}\nWallet.prototype._findSafeIndex = function (pointer) {\n pointer = pointer || 0;\n if (this.hasOwnProperty(pointer)) {\n return this._findSafeIndex(pointer + 1);\n }\n else {\n return pointer;\n }\n};\nWallet.prototype._currentIndexes = function () {\n var keys = Object.keys(this);\n var indexes = keys\n .map(function (key) {\n return parseInt(key);\n })\n .filter(function (n) {\n return (n < 9e20);\n });\n return indexes;\n};\nWallet.prototype.create = function (numberOfAccounts, entropy) {\n for (var i = 0; i < numberOfAccounts; ++i) {\n this.add(this._accounts.create(entropy).privateKey);\n }\n return this;\n};\nWallet.prototype.add = function (account) {\n if (typeof account === 'string') {\n account = this._accounts.privateKeyToAccount(account);\n }\n if (!this[account.address]) {\n account = this._accounts.privateKeyToAccount(account.privateKey);\n account.index = this._findSafeIndex();\n this[account.index] = account;\n this[account.address] = account;\n this[account.address.toLowerCase()] = account;\n this.length++;\n return account;\n }\n else {\n return this[account.address];\n }\n};\nWallet.prototype.remove = function (addressOrIndex) {\n var account = this[addressOrIndex];\n if (account && account.address) {\n // address\n this[account.address].privateKey = null;\n delete this[account.address];\n // address lowercase\n this[account.address.toLowerCase()].privateKey = null;\n delete this[account.address.toLowerCase()];\n // index\n this[account.index].privateKey = null;\n delete this[account.index];\n this.length--;\n return true;\n }\n else {\n return false;\n }\n};\nWallet.prototype.clear = function () {\n var _this = this;\n var indexes = this._currentIndexes();\n indexes.forEach(function (index) {\n _this.remove(index);\n });\n return this;\n};\nWallet.prototype.encrypt = function (password, options) {\n var _this = this;\n var indexes = this._currentIndexes();\n var accounts = indexes.map(function (index) {\n return _this[index].encrypt(password, options);\n });\n return accounts;\n};\nWallet.prototype.decrypt = function (encryptedWallet, password) {\n var _this = this;\n encryptedWallet.forEach(function (keystore) {\n var account = _this._accounts.decrypt(keystore, password);\n if (account) {\n _this.add(account);\n }\n else {\n throw new Error('Couldn\\'t decrypt accounts. Password wrong?');\n }\n });\n return this;\n};\nWallet.prototype.save = function (password, keyName) {\n localStorage.setItem(keyName || this.defaultKeyName, JSON.stringify(this.encrypt(password)));\n return true;\n};\nWallet.prototype.load = function (password, keyName) {\n var keystore = localStorage.getItem(keyName || this.defaultKeyName);\n if (keystore) {\n try {\n keystore = JSON.parse(keystore);\n }\n catch (e) {\n }\n }\n return this.decrypt(keystore || [], password);\n};\nif (!storageAvailable('localStorage')) {\n delete Wallet.prototype.save;\n delete Wallet.prototype.load;\n}\n/**\n * Checks whether a storage type is available or not\n * For more info on how this works, please refer to MDN documentation\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Feature-detecting_localStorage\n *\n * @method storageAvailable\n * @param {String} type the type of storage ('localStorage', 'sessionStorage')\n * @returns {Boolean} a boolean indicating whether the specified storage is available or not\n */\nfunction storageAvailable(type) {\n var storage;\n try {\n storage = self[type];\n var x = '__storage_test__';\n storage.setItem(x, x);\n storage.removeItem(x);\n return true;\n }\n catch (e) {\n return e && (\n // everything except Firefox\n e.code === 22 ||\n // Firefox\n e.code === 1014 ||\n // test name field too, because code might not be present\n // everything except Firefox\n e.name === 'QuotaExceededError' ||\n // Firefox\n e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&\n // acknowledge QuotaExceededError only if there's something already stored\n (storage && storage.length !== 0);\n }\n}\nmodule.exports = Accounts;\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","import assert from 'assert'\nimport { BN, rlp } from './externals'\nimport {\n privateKeyVerify,\n publicKeyCreate,\n publicKeyVerify,\n publicKeyConvert,\n} from 'ethereum-cryptography/secp256k1'\nimport { stripHexPrefix } from './internal'\nimport { KECCAK256_RLP, KECCAK256_NULL } from './constants'\nimport { zeros, bufferToHex, toBuffer } from './bytes'\nimport { keccak, keccak256, keccakFromString, rlphash } from './hash'\nimport { assertIsString, assertIsHexString, assertIsBuffer } from './helpers'\nimport { BNLike, BufferLike, bnToUnpaddedBuffer, toType, TypeOutput } from './types'\n\nexport interface AccountData {\n nonce?: BNLike\n balance?: BNLike\n stateRoot?: BufferLike\n codeHash?: BufferLike\n}\n\nexport class Account {\n nonce: BN\n balance: BN\n stateRoot: Buffer\n codeHash: Buffer\n\n static fromAccountData(accountData: AccountData) {\n const { nonce, balance, stateRoot, codeHash } = accountData\n\n return new Account(\n nonce ? new BN(toBuffer(nonce)) : undefined,\n balance ? new BN(toBuffer(balance)) : undefined,\n stateRoot ? toBuffer(stateRoot) : undefined,\n codeHash ? toBuffer(codeHash) : undefined\n )\n }\n\n public static fromRlpSerializedAccount(serialized: Buffer) {\n const values = rlp.decode(serialized)\n\n if (!Array.isArray(values)) {\n throw new Error('Invalid serialized account input. Must be array')\n }\n\n return this.fromValuesArray(values)\n }\n\n public static fromValuesArray(values: Buffer[]) {\n const [nonce, balance, stateRoot, codeHash] = values\n\n return new Account(new BN(nonce), new BN(balance), stateRoot, codeHash)\n }\n\n /**\n * This constructor assigns and validates the values.\n * Use the static factory methods to assist in creating an Account from varying data types.\n */\n constructor(\n nonce = new BN(0),\n balance = new BN(0),\n stateRoot = KECCAK256_RLP,\n codeHash = KECCAK256_NULL\n ) {\n this.nonce = nonce\n this.balance = balance\n this.stateRoot = stateRoot\n this.codeHash = codeHash\n\n this._validate()\n }\n\n private _validate() {\n if (this.nonce.lt(new BN(0))) {\n throw new Error('nonce must be greater than zero')\n }\n if (this.balance.lt(new BN(0))) {\n throw new Error('balance must be greater than zero')\n }\n if (this.stateRoot.length !== 32) {\n throw new Error('stateRoot must have a length of 32')\n }\n if (this.codeHash.length !== 32) {\n throw new Error('codeHash must have a length of 32')\n }\n }\n\n /**\n * Returns a Buffer Array of the raw Buffers for the account, in order.\n */\n raw(): Buffer[] {\n return [\n bnToUnpaddedBuffer(this.nonce),\n bnToUnpaddedBuffer(this.balance),\n this.stateRoot,\n this.codeHash,\n ]\n }\n\n /**\n * Returns the RLP serialization of the account as a `Buffer`.\n */\n serialize(): Buffer {\n return rlp.encode(this.raw())\n }\n\n /**\n * Returns a `Boolean` determining if the account is a contract.\n */\n isContract(): boolean {\n return !this.codeHash.equals(KECCAK256_NULL)\n }\n\n /**\n * Returns a `Boolean` determining if the account is empty complying to the definition of\n * account emptiness in [EIP-161](https://eips.ethereum.org/EIPS/eip-161):\n * \"An account is considered empty when it has no code and zero nonce and zero balance.\"\n */\n isEmpty(): boolean {\n return this.balance.isZero() && this.nonce.isZero() && this.codeHash.equals(KECCAK256_NULL)\n }\n}\n\n/**\n * Checks if the address is a valid. Accepts checksummed addresses too.\n */\nexport const isValidAddress = function (hexAddress: string): boolean {\n try {\n assertIsString(hexAddress)\n } catch (e: any) {\n return false\n }\n\n return /^0x[0-9a-fA-F]{40}$/.test(hexAddress)\n}\n\n/**\n * Returns a checksummed address.\n *\n * If an eip1191ChainId is provided, the chainId will be included in the checksum calculation. This\n * has the effect of checksummed addresses for one chain having invalid checksums for others.\n * For more details see [EIP-1191](https://eips.ethereum.org/EIPS/eip-1191).\n *\n * WARNING: Checksums with and without the chainId will differ and the EIP-1191 checksum is not\n * backwards compatible to the original widely adopted checksum format standard introduced in\n * [EIP-55](https://eips.ethereum.org/EIPS/eip-55), so this will break in existing applications.\n * Usage of this EIP is therefore discouraged unless you have a very targeted use case.\n */\nexport const toChecksumAddress = function (hexAddress: string, eip1191ChainId?: BNLike): string {\n assertIsHexString(hexAddress)\n const address = stripHexPrefix(hexAddress).toLowerCase()\n\n let prefix = ''\n if (eip1191ChainId) {\n const chainId = toType(eip1191ChainId, TypeOutput.BN)\n prefix = chainId.toString() + '0x'\n }\n\n const hash = keccakFromString(prefix + address).toString('hex')\n let ret = '0x'\n\n for (let i = 0; i < address.length; i++) {\n if (parseInt(hash[i], 16) >= 8) {\n ret += address[i].toUpperCase()\n } else {\n ret += address[i]\n }\n }\n\n return ret\n}\n\n/**\n * Checks if the address is a valid checksummed address.\n *\n * See toChecksumAddress' documentation for details about the eip1191ChainId parameter.\n */\nexport const isValidChecksumAddress = function (\n hexAddress: string,\n eip1191ChainId?: BNLike\n): boolean {\n return isValidAddress(hexAddress) && toChecksumAddress(hexAddress, eip1191ChainId) === hexAddress\n}\n\n/**\n * Generates an address of a newly created contract.\n * @param from The address which is creating this new address\n * @param nonce The nonce of the from account\n */\nexport const generateAddress = function (from: Buffer, nonce: Buffer): Buffer {\n assertIsBuffer(from)\n assertIsBuffer(nonce)\n const nonceBN = new BN(nonce)\n\n if (nonceBN.isZero()) {\n // in RLP we want to encode null in the case of zero nonce\n // read the RLP documentation for an answer if you dare\n return rlphash([from, null]).slice(-20)\n }\n\n // Only take the lower 160bits of the hash\n return rlphash([from, Buffer.from(nonceBN.toArray())]).slice(-20)\n}\n\n/**\n * Generates an address for a contract created using CREATE2.\n * @param from The address which is creating this new address\n * @param salt A salt\n * @param initCode The init code of the contract being created\n */\nexport const generateAddress2 = function (from: Buffer, salt: Buffer, initCode: Buffer): Buffer {\n assertIsBuffer(from)\n assertIsBuffer(salt)\n assertIsBuffer(initCode)\n\n assert(from.length === 20)\n assert(salt.length === 32)\n\n const address = keccak256(\n Buffer.concat([Buffer.from('ff', 'hex'), from, salt, keccak256(initCode)])\n )\n\n return address.slice(-20)\n}\n\n/**\n * Checks if the private key satisfies the rules of the curve secp256k1.\n */\nexport const isValidPrivate = function (privateKey: Buffer): boolean {\n return privateKeyVerify(privateKey)\n}\n\n/**\n * Checks if the public key satisfies the rules of the curve secp256k1\n * and the requirements of Ethereum.\n * @param publicKey The two points of an uncompressed key, unless sanitize is enabled\n * @param sanitize Accept public keys in other formats\n */\nexport const isValidPublic = function (publicKey: Buffer, sanitize: boolean = false): boolean {\n assertIsBuffer(publicKey)\n if (publicKey.length === 64) {\n // Convert to SEC1 for secp256k1\n return publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey]))\n }\n\n if (!sanitize) {\n return false\n }\n\n return publicKeyVerify(publicKey)\n}\n\n/**\n * Returns the ethereum address of a given public key.\n * Accepts \"Ethereum public keys\" and SEC1 encoded keys.\n * @param pubKey The two points of an uncompressed key, unless sanitize is enabled\n * @param sanitize Accept public keys in other formats\n */\nexport const pubToAddress = function (pubKey: Buffer, sanitize: boolean = false): Buffer {\n assertIsBuffer(pubKey)\n if (sanitize && pubKey.length !== 64) {\n pubKey = Buffer.from(publicKeyConvert(pubKey, false).slice(1))\n }\n assert(pubKey.length === 64)\n // Only take the lower 160bits of the hash\n return keccak(pubKey).slice(-20)\n}\nexport const publicToAddress = pubToAddress\n\n/**\n * Returns the ethereum public key of a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\nexport const privateToPublic = function (privateKey: Buffer): Buffer {\n assertIsBuffer(privateKey)\n // skip the type flag and use the X, Y points\n return Buffer.from(publicKeyCreate(privateKey, false)).slice(1)\n}\n\n/**\n * Returns the ethereum address of a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\nexport const privateToAddress = function (privateKey: Buffer): Buffer {\n return publicToAddress(privateToPublic(privateKey))\n}\n\n/**\n * Converts a public key to the Ethereum format.\n */\nexport const importPublic = function (publicKey: Buffer): Buffer {\n assertIsBuffer(publicKey)\n if (publicKey.length !== 64) {\n publicKey = Buffer.from(publicKeyConvert(publicKey, false).slice(1))\n }\n return publicKey\n}\n\n/**\n * Returns the zero address.\n */\nexport const zeroAddress = function (): string {\n const addressLength = 20\n const addr = zeros(addressLength)\n return bufferToHex(addr)\n}\n\n/**\n * Checks if a given address is the zero address.\n */\nexport const isZeroAddress = function (hexAddress: string): boolean {\n try {\n assertIsString(hexAddress)\n } catch (e: any) {\n return false\n }\n\n const zeroAddr = zeroAddress()\n return zeroAddr === hexAddress\n}\n","import assert from 'assert'\nimport { BN } from './externals'\nimport { toBuffer, zeros } from './bytes'\nimport {\n isValidAddress,\n pubToAddress,\n privateToAddress,\n generateAddress,\n generateAddress2,\n} from './account'\n\nexport class Address {\n public readonly buf: Buffer\n\n constructor(buf: Buffer) {\n assert(buf.length === 20, 'Invalid address length')\n this.buf = buf\n }\n\n /**\n * Returns the zero address.\n */\n static zero(): Address {\n return new Address(zeros(20))\n }\n\n /**\n * Returns an Address object from a hex-encoded string.\n * @param str - Hex-encoded address\n */\n static fromString(str: string): Address {\n assert(isValidAddress(str), 'Invalid address')\n return new Address(toBuffer(str))\n }\n\n /**\n * Returns an address for a given public key.\n * @param pubKey The two points of an uncompressed key\n */\n static fromPublicKey(pubKey: Buffer): Address {\n assert(Buffer.isBuffer(pubKey), 'Public key should be Buffer')\n const buf = pubToAddress(pubKey)\n return new Address(buf)\n }\n\n /**\n * Returns an address for a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\n static fromPrivateKey(privateKey: Buffer): Address {\n assert(Buffer.isBuffer(privateKey), 'Private key should be Buffer')\n const buf = privateToAddress(privateKey)\n return new Address(buf)\n }\n\n /**\n * Generates an address for a newly created contract.\n * @param from The address which is creating this new address\n * @param nonce The nonce of the from account\n */\n static generate(from: Address, nonce: BN): Address {\n assert(BN.isBN(nonce))\n return new Address(generateAddress(from.buf, nonce.toArrayLike(Buffer)))\n }\n\n /**\n * Generates an address for a contract created using CREATE2.\n * @param from The address which is creating this new address\n * @param salt A salt\n * @param initCode The init code of the contract being created\n */\n static generate2(from: Address, salt: Buffer, initCode: Buffer): Address {\n assert(Buffer.isBuffer(salt))\n assert(Buffer.isBuffer(initCode))\n return new Address(generateAddress2(from.buf, salt, initCode))\n }\n\n /**\n * Is address equal to another.\n */\n equals(address: Address): boolean {\n return this.buf.equals(address.buf)\n }\n\n /**\n * Is address zero.\n */\n isZero(): boolean {\n return this.equals(Address.zero())\n }\n\n /**\n * True if address is in the address range defined\n * by EIP-1352\n */\n isPrecompileOrSystemAddress(): boolean {\n const addressBN = new BN(this.buf)\n const rangeMin = new BN(0)\n const rangeMax = new BN('ffff', 'hex')\n\n return addressBN.gte(rangeMin) && addressBN.lte(rangeMax)\n }\n\n /**\n * Returns hex encoding of address.\n */\n toString(): string {\n return '0x' + this.buf.toString('hex')\n }\n\n /**\n * Returns Buffer representation of address.\n */\n toBuffer(): Buffer {\n return Buffer.from(this.buf)\n }\n}\n","import { BN } from './externals'\nimport { stripHexPrefix, padToEven, isHexString, isHexPrefixed } from './internal'\nimport {\n PrefixedHexString,\n TransformableToArray,\n TransformableToBuffer,\n NestedBufferArray,\n NestedUint8Array,\n} from './types'\nimport { assertIsBuffer, assertIsArray, assertIsHexString } from './helpers'\n\n/**\n * Converts a `Number` into a hex `String`\n * @param {Number} i\n * @return {String}\n */\nexport const intToHex = function (i: number) {\n if (!Number.isSafeInteger(i) || i < 0) {\n throw new Error(`Received an invalid integer type: ${i}`)\n }\n return `0x${i.toString(16)}`\n}\n\n/**\n * Converts an `Number` to a `Buffer`\n * @param {Number} i\n * @return {Buffer}\n */\nexport const intToBuffer = function (i: number) {\n const hex = intToHex(i)\n return Buffer.from(padToEven(hex.slice(2)), 'hex')\n}\n\n/**\n * Returns a buffer filled with 0s.\n * @param bytes the number of bytes the buffer should be\n */\nexport const zeros = function (bytes: number): Buffer {\n return Buffer.allocUnsafe(bytes).fill(0)\n}\n\n/**\n * Pads a `Buffer` with zeros till it has `length` bytes.\n * Truncates the beginning or end of input if its length exceeds `length`.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @param right whether to start padding form the left or right\n * @return (Buffer)\n */\nconst setLength = function (msg: Buffer, length: number, right: boolean) {\n const buf = zeros(length)\n if (right) {\n if (msg.length < length) {\n msg.copy(buf)\n return buf\n }\n return msg.slice(0, length)\n } else {\n if (msg.length < length) {\n msg.copy(buf, length - msg.length)\n return buf\n }\n return msg.slice(-length)\n }\n}\n\n/**\n * Left Pads a `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @return (Buffer)\n */\nexport const setLengthLeft = function (msg: Buffer, length: number) {\n assertIsBuffer(msg)\n return setLength(msg, length, false)\n}\n\n/**\n * Right Pads a `Buffer` with trailing zeros till it has `length` bytes.\n * it truncates the end if it exceeds.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @return (Buffer)\n */\nexport const setLengthRight = function (msg: Buffer, length: number) {\n assertIsBuffer(msg)\n return setLength(msg, length, true)\n}\n\n/**\n * Trims leading zeros from a `Buffer`, `String` or `Number[]`.\n * @param a (Buffer|Array|String)\n * @return (Buffer|Array|String)\n */\nconst stripZeros = function (a: any): Buffer | number[] | string {\n let first = a[0]\n while (a.length > 0 && first.toString() === '0') {\n a = a.slice(1)\n first = a[0]\n }\n return a\n}\n\n/**\n * Trims leading zeros from a `Buffer`.\n * @param a (Buffer)\n * @return (Buffer)\n */\nexport const unpadBuffer = function (a: Buffer): Buffer {\n assertIsBuffer(a)\n return stripZeros(a) as Buffer\n}\n\n/**\n * Trims leading zeros from an `Array` (of numbers).\n * @param a (number[])\n * @return (number[])\n */\nexport const unpadArray = function (a: number[]): number[] {\n assertIsArray(a)\n return stripZeros(a) as number[]\n}\n\n/**\n * Trims leading zeros from a hex-prefixed `String`.\n * @param a (String)\n * @return (String)\n */\nexport const unpadHexString = function (a: string): string {\n assertIsHexString(a)\n a = stripHexPrefix(a)\n return stripZeros(a) as string\n}\n\nexport type ToBufferInputTypes =\n | PrefixedHexString\n | number\n | BN\n | Buffer\n | Uint8Array\n | number[]\n | TransformableToArray\n | TransformableToBuffer\n | null\n | undefined\n\n/**\n * Attempts to turn a value into a `Buffer`.\n * Inputs supported: `Buffer`, `String` (hex-prefixed), `Number`, null/undefined, `BN` and other objects\n * with a `toArray()` or `toBuffer()` method.\n * @param v the value\n */\nexport const toBuffer = function (v: ToBufferInputTypes): Buffer {\n if (v === null || v === undefined) {\n return Buffer.allocUnsafe(0)\n }\n\n if (Buffer.isBuffer(v)) {\n return Buffer.from(v)\n }\n\n if (Array.isArray(v) || v instanceof Uint8Array) {\n return Buffer.from(v as Uint8Array)\n }\n\n if (typeof v === 'string') {\n if (!isHexString(v)) {\n throw new Error(\n `Cannot convert string to buffer. toBuffer only supports 0x-prefixed hex strings and this string was given: ${v}`\n )\n }\n return Buffer.from(padToEven(stripHexPrefix(v)), 'hex')\n }\n\n if (typeof v === 'number') {\n return intToBuffer(v)\n }\n\n if (BN.isBN(v)) {\n if (v.isNeg()) {\n throw new Error(`Cannot convert negative BN to buffer. Given: ${v}`)\n }\n return v.toArrayLike(Buffer)\n }\n\n if (v.toArray) {\n // converts a BN to a Buffer\n return Buffer.from(v.toArray())\n }\n\n if (v.toBuffer) {\n return Buffer.from(v.toBuffer())\n }\n\n throw new Error('invalid type')\n}\n\n/**\n * Converts a `Buffer` to a `Number`.\n * @param buf `Buffer` object to convert\n * @throws If the input number exceeds 53 bits.\n */\nexport const bufferToInt = function (buf: Buffer): number {\n return new BN(toBuffer(buf)).toNumber()\n}\n\n/**\n * Converts a `Buffer` into a `0x`-prefixed hex `String`.\n * @param buf `Buffer` object to convert\n */\nexport const bufferToHex = function (buf: Buffer): string {\n buf = toBuffer(buf)\n return '0x' + buf.toString('hex')\n}\n\n/**\n * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.\n * @param num Signed integer value\n */\nexport const fromSigned = function (num: Buffer): BN {\n return new BN(num).fromTwos(256)\n}\n\n/**\n * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.\n * @param num\n */\nexport const toUnsigned = function (num: BN): Buffer {\n return Buffer.from(num.toTwos(256).toArray())\n}\n\n/**\n * Adds \"0x\" to a given `String` if it does not already start with \"0x\".\n */\nexport const addHexPrefix = function (str: string): string {\n if (typeof str !== 'string') {\n return str\n }\n\n return isHexPrefixed(str) ? str : '0x' + str\n}\n\n/**\n * Returns the utf8 string representation from a hex string.\n *\n * Examples:\n *\n * Input 1: '657468657265756d000000000000000000000000000000000000000000000000'\n * Input 2: '657468657265756d'\n * Input 3: '000000000000000000000000000000000000000000000000657468657265756d'\n *\n * Output (all 3 input variants): 'ethereum'\n *\n * Note that this method is not intended to be used with hex strings\n * representing quantities in both big endian or little endian notation.\n *\n * @param string Hex string, should be `0x` prefixed\n * @return Utf8 string\n */\nexport const toUtf8 = function (hex: string): string {\n const zerosRegexp = /^(00)+|(00)+$/g\n hex = stripHexPrefix(hex)\n if (hex.length % 2 !== 0) {\n throw new Error('Invalid non-even hex string input for toUtf8() provided')\n }\n const bufferVal = Buffer.from(hex.replace(zerosRegexp, ''), 'hex')\n\n return bufferVal.toString('utf8')\n}\n\n/**\n * Converts a `Buffer` or `Array` to JSON.\n * @param ba (Buffer|Array)\n * @return (Array|String|null)\n */\nexport const baToJSON = function (ba: any): any {\n if (Buffer.isBuffer(ba)) {\n return `0x${ba.toString('hex')}`\n } else if (ba instanceof Array) {\n const array = []\n for (let i = 0; i < ba.length; i++) {\n array.push(baToJSON(ba[i]))\n }\n return array\n }\n}\n\n/**\n * Checks provided Buffers for leading zeroes and throws if found.\n *\n * Examples:\n *\n * Valid values: 0x1, 0x, 0x01, 0x1234\n * Invalid values: 0x0, 0x00, 0x001, 0x0001\n *\n * Note: This method is useful for validating that RLP encoded integers comply with the rule that all\n * integer values encoded to RLP must be in the most compact form and contain no leading zero bytes\n * @param values An object containing string keys and Buffer values\n * @throws if any provided value is found to have leading zero bytes\n */\nexport const validateNoLeadingZeroes = function (values: { [key: string]: Buffer | undefined }) {\n for (const [k, v] of Object.entries(values)) {\n if (v !== undefined && v.length > 0 && v[0] === 0) {\n throw new Error(`${k} cannot have leading zeroes, received: ${v.toString('hex')}`)\n }\n }\n}\n\n/**\n * Converts a {@link Uint8Array} or {@link NestedUint8Array} to {@link Buffer} or {@link NestedBufferArray}\n */\nexport function arrToBufArr(arr: Uint8Array): Buffer\nexport function arrToBufArr(arr: NestedUint8Array): NestedBufferArray\nexport function arrToBufArr(arr: Uint8Array | NestedUint8Array): Buffer | NestedBufferArray\nexport function arrToBufArr(arr: Uint8Array | NestedUint8Array): Buffer | NestedBufferArray {\n if (!Array.isArray(arr)) {\n return Buffer.from(arr)\n }\n return arr.map((a) => arrToBufArr(a))\n}\n\n/**\n * Converts a {@link Buffer} or {@link NestedBufferArray} to {@link Uint8Array} or {@link NestedUint8Array}\n */\nexport function bufArrToArr(arr: Buffer): Uint8Array\nexport function bufArrToArr(arr: NestedBufferArray): NestedUint8Array\nexport function bufArrToArr(arr: Buffer | NestedBufferArray): Uint8Array | NestedUint8Array\nexport function bufArrToArr(arr: Buffer | NestedBufferArray): Uint8Array | NestedUint8Array {\n if (!Array.isArray(arr)) {\n return Uint8Array.from(arr ?? [])\n }\n return arr.map((a) => bufArrToArr(a))\n}\n","import { Buffer } from 'buffer'\nimport { BN } from './externals'\n\n/**\n * 2^64-1\n */\nexport const MAX_UINT64 = new BN('ffffffffffffffff', 16)\n\n/**\n * The max integer that the evm can handle (2^256-1)\n */\nexport const MAX_INTEGER = new BN(\n 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',\n 16\n)\n\n/**\n * 2^256\n */\nexport const TWO_POW256 = new BN(\n '10000000000000000000000000000000000000000000000000000000000000000',\n 16\n)\n\n/**\n * Keccak-256 hash of null\n */\nexport const KECCAK256_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'\n\n/**\n * Keccak-256 hash of null\n */\nexport const KECCAK256_NULL = Buffer.from(KECCAK256_NULL_S, 'hex')\n\n/**\n * Keccak-256 of an RLP of an empty array\n */\nexport const KECCAK256_RLP_ARRAY_S =\n '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'\n\n/**\n * Keccak-256 of an RLP of an empty array\n */\nexport const KECCAK256_RLP_ARRAY = Buffer.from(KECCAK256_RLP_ARRAY_S, 'hex')\n\n/**\n * Keccak-256 hash of the RLP of null\n */\nexport const KECCAK256_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'\n\n/**\n * Keccak-256 hash of the RLP of null\n */\nexport const KECCAK256_RLP = Buffer.from(KECCAK256_RLP_S, 'hex')\n","/**\n * Re-exports commonly used modules:\n * * Exports [`BN`](https://github.com/indutny/bn.js), [`rlp`](https://github.com/ethereumjs/rlp).\n * @packageDocumentation\n */\n\nimport BN from 'bn.js'\nimport * as rlp from 'rlp'\n\n/**\n * [`BN`](https://github.com/indutny/bn.js)\n */\nexport { BN }\n\n/**\n * [`rlp`](https://github.com/ethereumjs/rlp)\n */\nexport { rlp }\n","import { keccak224, keccak384, keccak256 as k256, keccak512 } from 'ethereum-cryptography/keccak'\nconst createHash = require('create-hash')\nimport { rlp } from './externals'\nimport { toBuffer, setLengthLeft } from './bytes'\nimport { assertIsString, assertIsBuffer, assertIsArray, assertIsHexString } from './helpers'\n\n/**\n * Creates Keccak hash of a Buffer input\n * @param a The input data (Buffer)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccak = function (a: Buffer, bits: number = 256): Buffer {\n assertIsBuffer(a)\n switch (bits) {\n case 224: {\n return keccak224(a)\n }\n case 256: {\n return k256(a)\n }\n case 384: {\n return keccak384(a)\n }\n case 512: {\n return keccak512(a)\n }\n default: {\n throw new Error(`Invald algorithm: keccak${bits}`)\n }\n }\n}\n\n/**\n * Creates Keccak-256 hash of the input, alias for keccak(a, 256).\n * @param a The input data (Buffer)\n */\nexport const keccak256 = function (a: Buffer): Buffer {\n return keccak(a)\n}\n\n/**\n * Creates Keccak hash of a utf-8 string input\n * @param a The input data (String)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromString = function (a: string, bits: number = 256) {\n assertIsString(a)\n const buf = Buffer.from(a, 'utf8')\n return keccak(buf, bits)\n}\n\n/**\n * Creates Keccak hash of an 0x-prefixed string input\n * @param a The input data (String)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromHexString = function (a: string, bits: number = 256) {\n assertIsHexString(a)\n return keccak(toBuffer(a), bits)\n}\n\n/**\n * Creates Keccak hash of a number array input\n * @param a The input data (number[])\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromArray = function (a: number[], bits: number = 256) {\n assertIsArray(a)\n return keccak(toBuffer(a), bits)\n}\n\n/**\n * Creates SHA256 hash of an input.\n * @param a The input data (Buffer|Array|String)\n */\nconst _sha256 = function (a: any): Buffer {\n a = toBuffer(a)\n return createHash('sha256').update(a).digest()\n}\n\n/**\n * Creates SHA256 hash of a Buffer input.\n * @param a The input data (Buffer)\n */\nexport const sha256 = function (a: Buffer): Buffer {\n assertIsBuffer(a)\n return _sha256(a)\n}\n\n/**\n * Creates SHA256 hash of a string input.\n * @param a The input data (string)\n */\nexport const sha256FromString = function (a: string): Buffer {\n assertIsString(a)\n return _sha256(a)\n}\n\n/**\n * Creates SHA256 hash of a number[] input.\n * @param a The input data (number[])\n */\nexport const sha256FromArray = function (a: number[]): Buffer {\n assertIsArray(a)\n return _sha256(a)\n}\n\n/**\n * Creates RIPEMD160 hash of the input.\n * @param a The input data (Buffer|Array|String|Number)\n * @param padded Whether it should be padded to 256 bits or not\n */\nconst _ripemd160 = function (a: any, padded: boolean): Buffer {\n a = toBuffer(a)\n const hash = createHash('rmd160').update(a).digest()\n if (padded === true) {\n return setLengthLeft(hash, 32)\n } else {\n return hash\n }\n}\n\n/**\n * Creates RIPEMD160 hash of a Buffer input.\n * @param a The input data (Buffer)\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160 = function (a: Buffer, padded: boolean): Buffer {\n assertIsBuffer(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates RIPEMD160 hash of a string input.\n * @param a The input data (String)\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160FromString = function (a: string, padded: boolean): Buffer {\n assertIsString(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates RIPEMD160 hash of a number[] input.\n * @param a The input data (number[])\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160FromArray = function (a: number[], padded: boolean): Buffer {\n assertIsArray(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates SHA-3 hash of the RLP encoded version of the input.\n * @param a The input data\n */\nexport const rlphash = function (a: rlp.Input): Buffer {\n return keccak(rlp.encode(a))\n}\n","import { isHexString } from './internal'\n\n/**\n * Throws if a string is not hex prefixed\n * @param {string} input string to check hex prefix of\n */\nexport const assertIsHexString = function (input: string): void {\n if (!isHexString(input)) {\n const msg = `This method only supports 0x-prefixed hex strings but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not a buffer\n * @param {Buffer} input value to check\n */\nexport const assertIsBuffer = function (input: Buffer): void {\n if (!Buffer.isBuffer(input)) {\n const msg = `This method only supports Buffer but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not an array\n * @param {number[]} input value to check\n */\nexport const assertIsArray = function (input: number[]): void {\n if (!Array.isArray(input)) {\n const msg = `This method only supports number arrays but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not a string\n * @param {string} input value to check\n */\nexport const assertIsString = function (input: string): void {\n if (typeof input !== 'string') {\n const msg = `This method only supports strings but input was: ${input}`\n throw new Error(msg)\n }\n}\n","/**\n * Constants\n */\nexport * from './constants'\n\n/**\n * Account class and helper functions\n */\nexport * from './account'\n\n/**\n * Address type\n */\nexport * from './address'\n\n/**\n * Hash functions\n */\nexport * from './hash'\n\n/**\n * ECDSA signature\n */\nexport * from './signature'\n\n/**\n * Utilities for manipulating Buffers, byte arrays, etc.\n */\nexport * from './bytes'\n\n/**\n * Function for definining properties on an object\n */\nexport * from './object'\n\n/**\n * External exports (BN, rlp)\n */\nexport * from './externals'\n\n/**\n * Helpful TypeScript types\n */\nexport * from './types'\n\n/**\n * Export ethjs-util methods\n */\nexport {\n isHexPrefixed,\n stripHexPrefix,\n padToEven,\n getBinarySize,\n arrayContainsArray,\n toAscii,\n fromUtf8,\n fromAscii,\n getKeys,\n isHexString,\n} from './internal'\n","/*\nThe MIT License\n\nCopyright (c) 2016 Nick Dodson. nickdodson.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE\n */\n\n/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param str the string input value\n * @return a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nexport function isHexPrefixed(str: string): boolean {\n if (typeof str !== 'string') {\n throw new Error(`[isHexPrefixed] input must be type 'string', received type ${typeof str}`)\n }\n\n return str[0] === '0' && str[1] === 'x'\n}\n\n/**\n * Removes '0x' from a given `String` if present\n * @param str the string value\n * @returns the string without 0x prefix\n */\nexport const stripHexPrefix = (str: string): string => {\n if (typeof str !== 'string')\n throw new Error(`[stripHexPrefix] input must be type 'string', received ${typeof str}`)\n\n return isHexPrefixed(str) ? str.slice(2) : str\n}\n\n/**\n * Pads a `String` to have an even length\n * @param value\n * @return output\n */\nexport function padToEven(value: string): string {\n let a = value\n\n if (typeof a !== 'string') {\n throw new Error(`[padToEven] value must be type 'string', received ${typeof a}`)\n }\n\n if (a.length % 2) a = `0${a}`\n\n return a\n}\n\n/**\n * Get the binary size of a string\n * @param str\n * @returns the number of bytes contained within the string\n */\nexport function getBinarySize(str: string) {\n if (typeof str !== 'string') {\n throw new Error(`[getBinarySize] method requires input type 'string', recieved ${typeof str}`)\n }\n\n return Buffer.byteLength(str, 'utf8')\n}\n\n/**\n * Returns TRUE if the first specified array contains all elements\n * from the second one. FALSE otherwise.\n *\n * @param superset\n * @param subset\n *\n */\nexport function arrayContainsArray(\n superset: unknown[],\n subset: unknown[],\n some?: boolean\n): boolean {\n if (Array.isArray(superset) !== true) {\n throw new Error(\n `[arrayContainsArray] method requires input 'superset' to be an array, got type '${typeof superset}'`\n )\n }\n if (Array.isArray(subset) !== true) {\n throw new Error(\n `[arrayContainsArray] method requires input 'subset' to be an array, got type '${typeof subset}'`\n )\n }\n\n return subset[some ? 'some' : 'every']((value) => superset.indexOf(value) >= 0)\n}\n\n/**\n * Should be called to get ascii from its hex representation\n *\n * @param string in hex\n * @returns ascii string representation of hex value\n */\nexport function toAscii(hex: string): string {\n let str = ''\n let i = 0\n const l = hex.length\n\n if (hex.substring(0, 2) === '0x') i = 2\n\n for (; i < l; i += 2) {\n const code = parseInt(hex.substr(i, 2), 16)\n str += String.fromCharCode(code)\n }\n\n return str\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @param string\n * @param optional padding\n * @returns hex representation of input string\n */\nexport function fromUtf8(stringValue: string) {\n const str = Buffer.from(stringValue, 'utf8')\n\n return `0x${padToEven(str.toString('hex')).replace(/^0+|0+$/g, '')}`\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @param string\n * @param optional padding\n * @returns hex representation of input string\n */\nexport function fromAscii(stringValue: string) {\n let hex = ''\n for (let i = 0; i < stringValue.length; i++) {\n const code = stringValue.charCodeAt(i)\n const n = code.toString(16)\n hex += n.length < 2 ? `0${n}` : n\n }\n\n return `0x${hex}`\n}\n\n/**\n * Returns the keys from an array of objects.\n * @example\n * ```js\n * getKeys([{a: '1', b: '2'}, {a: '3', b: '4'}], 'a') => ['1', '3']\n *````\n * @param params\n * @param key\n * @param allowEmpty\n * @returns output just a simple array of output keys\n */\nexport function getKeys(params: Record[], key: string, allowEmpty?: boolean) {\n if (!Array.isArray(params)) {\n throw new Error(`[getKeys] method expects input 'params' to be an array, got ${typeof params}`)\n }\n if (typeof key !== 'string') {\n throw new Error(\n `[getKeys] method expects input 'key' to be type 'string', got ${typeof params}`\n )\n }\n\n const result = []\n\n for (let i = 0; i < params.length; i++) {\n let value = params[i][key]\n if (allowEmpty && !value) {\n value = ''\n } else if (typeof value !== 'string') {\n throw new Error(`invalid abi - expected type 'string', received ${typeof value}`)\n }\n result.push(value)\n }\n\n return result\n}\n\n/**\n * Is the string a hex string.\n *\n * @param value\n * @param length\n * @returns output the string is a hex string\n */\nexport function isHexString(value: string, length?: number): boolean {\n if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) return false\n\n if (length && value.length !== 2 + 2 * length) return false\n\n return true\n}\n","import assert from 'assert'\nimport { stripHexPrefix } from './internal'\nimport { rlp } from './externals'\nimport { toBuffer, baToJSON, unpadBuffer } from './bytes'\n\n/**\n * Defines properties on a `Object`. It make the assumption that underlying data is binary.\n * @param self the `Object` to define properties on\n * @param fields an array fields to define. Fields can contain:\n * * `name` - the name of the properties\n * * `length` - the number of bytes the field can have\n * * `allowLess` - if the field can be less than the length\n * * `allowEmpty`\n * @param data data to be validated against the definitions\n * @deprecated\n */\nexport const defineProperties = function (self: any, fields: any, data?: any) {\n self.raw = []\n self._fields = []\n\n // attach the `toJSON`\n self.toJSON = function (label: boolean = false) {\n if (label) {\n type Dict = { [key: string]: string }\n const obj: Dict = {}\n self._fields.forEach((field: string) => {\n obj[field] = `0x${self[field].toString('hex')}`\n })\n return obj\n }\n return baToJSON(self.raw)\n }\n\n self.serialize = function serialize() {\n return rlp.encode(self.raw)\n }\n\n fields.forEach((field: any, i: number) => {\n self._fields.push(field.name)\n function getter() {\n return self.raw[i]\n }\n function setter(v: any) {\n v = toBuffer(v)\n\n if (v.toString('hex') === '00' && !field.allowZero) {\n v = Buffer.allocUnsafe(0)\n }\n\n if (field.allowLess && field.length) {\n v = unpadBuffer(v)\n assert(\n field.length >= v.length,\n `The field ${field.name} must not have more ${field.length} bytes`\n )\n } else if (!(field.allowZero && v.length === 0) && field.length) {\n assert(\n field.length === v.length,\n `The field ${field.name} must have byte length of ${field.length}`\n )\n }\n\n self.raw[i] = v\n }\n\n Object.defineProperty(self, field.name, {\n enumerable: true,\n configurable: true,\n get: getter,\n set: setter,\n })\n\n if (field.default) {\n self[field.name] = field.default\n }\n\n // attach alias\n if (field.alias) {\n Object.defineProperty(self, field.alias, {\n enumerable: false,\n configurable: true,\n set: setter,\n get: getter,\n })\n }\n })\n\n // if the constuctor is passed data\n if (data) {\n if (typeof data === 'string') {\n data = Buffer.from(stripHexPrefix(data), 'hex')\n }\n\n if (Buffer.isBuffer(data)) {\n data = rlp.decode(data)\n }\n\n if (Array.isArray(data)) {\n if (data.length > self._fields.length) {\n throw new Error('wrong number of fields in data')\n }\n\n // make sure all the items are buffers\n data.forEach((d, i) => {\n self[self._fields[i]] = toBuffer(d)\n })\n } else if (typeof data === 'object') {\n const keys = Object.keys(data)\n fields.forEach((field: any) => {\n if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]\n if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]\n })\n } else {\n throw new Error('invalid data')\n }\n }\n}\n","import { ecdsaSign, ecdsaRecover, publicKeyConvert } from 'ethereum-cryptography/secp256k1'\nimport { BN } from './externals'\nimport { toBuffer, setLengthLeft, bufferToHex, bufferToInt } from './bytes'\nimport { keccak } from './hash'\nimport { assertIsBuffer } from './helpers'\nimport { BNLike, toType, TypeOutput } from './types'\n\nexport interface ECDSASignature {\n v: number\n r: Buffer\n s: Buffer\n}\n\nexport interface ECDSASignatureBuffer {\n v: Buffer\n r: Buffer\n s: Buffer\n}\n\n/**\n * Returns the ECDSA signature of a message hash.\n */\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId?: number): ECDSASignature\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId: BNLike): ECDSASignatureBuffer\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId: any): any {\n const { signature, recid: recovery } = ecdsaSign(msgHash, privateKey)\n\n const r = Buffer.from(signature.slice(0, 32))\n const s = Buffer.from(signature.slice(32, 64))\n\n if (!chainId || typeof chainId === 'number') {\n // return legacy type ECDSASignature (deprecated in favor of ECDSASignatureBuffer to handle large chainIds)\n if (chainId && !Number.isSafeInteger(chainId)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)'\n )\n }\n const v = chainId ? recovery + (chainId * 2 + 35) : recovery + 27\n return { r, s, v }\n }\n\n const chainIdBN = toType(chainId as BNLike, TypeOutput.BN)\n const v = chainIdBN.muln(2).addn(35).addn(recovery).toArrayLike(Buffer)\n return { r, s, v }\n}\n\nfunction calculateSigRecovery(v: BNLike, chainId?: BNLike): BN {\n const vBN = toType(v, TypeOutput.BN)\n if (!chainId) {\n return vBN.subn(27)\n }\n const chainIdBN = toType(chainId, TypeOutput.BN)\n return vBN.sub(chainIdBN.muln(2).addn(35))\n}\n\nfunction isValidSigRecovery(recovery: number | BN): boolean {\n const rec = new BN(recovery)\n return rec.eqn(0) || rec.eqn(1)\n}\n\n/**\n * ECDSA public key recovery from signature.\n * @returns Recovered public key\n */\nexport const ecrecover = function (\n msgHash: Buffer,\n v: BNLike,\n r: Buffer,\n s: Buffer,\n chainId?: BNLike\n): Buffer {\n const signature = Buffer.concat([setLengthLeft(r, 32), setLengthLeft(s, 32)], 64)\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n const senderPubKey = ecdsaRecover(signature, recovery.toNumber(), msgHash)\n return Buffer.from(publicKeyConvert(senderPubKey, false).slice(1))\n}\n\n/**\n * Convert signature parameters into the format of `eth_sign` RPC method.\n * @returns Signature\n */\nexport const toRpcSig = function (v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike): string {\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n\n // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin\n return bufferToHex(Buffer.concat([setLengthLeft(r, 32), setLengthLeft(s, 32), toBuffer(v)]))\n}\n\n/**\n * Convert signature parameters into the format of Compact Signature Representation (EIP-2098).\n * @returns Signature\n */\nexport const toCompactSig = function (v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike): string {\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n\n const vn = toType(v, TypeOutput.Number)\n let ss = s\n if ((vn > 28 && vn % 2 === 1) || vn === 1 || vn === 28) {\n ss = Buffer.from(s)\n ss[0] |= 0x80\n }\n\n return bufferToHex(Buffer.concat([setLengthLeft(r, 32), setLengthLeft(ss, 32)]))\n}\n\n/**\n * Convert signature format of the `eth_sign` RPC method to signature parameters\n * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053\n */\nexport const fromRpcSig = function (sig: string): ECDSASignature {\n const buf: Buffer = toBuffer(sig)\n\n let r: Buffer\n let s: Buffer\n let v: number\n if (buf.length >= 65) {\n r = buf.slice(0, 32)\n s = buf.slice(32, 64)\n v = bufferToInt(buf.slice(64))\n } else if (buf.length === 64) {\n // Compact Signature Representation (https://eips.ethereum.org/EIPS/eip-2098)\n r = buf.slice(0, 32)\n s = buf.slice(32, 64)\n v = bufferToInt(buf.slice(32, 33)) >> 7\n s[0] &= 0x7f\n } else {\n throw new Error('Invalid signature length')\n }\n\n // support both versions of `eth_sign` responses\n if (v < 27) {\n v += 27\n }\n\n return {\n v,\n r,\n s,\n }\n}\n\n/**\n * Validate a ECDSA signature.\n * @param homesteadOrLater Indicates whether this is being used on either the homestead hardfork or a later one\n */\nexport const isValidSignature = function (\n v: BNLike,\n r: Buffer,\n s: Buffer,\n homesteadOrLater: boolean = true,\n chainId?: BNLike\n): boolean {\n const SECP256K1_N_DIV_2 = new BN(\n '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0',\n 16\n )\n const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)\n\n if (r.length !== 32 || s.length !== 32) {\n return false\n }\n\n if (!isValidSigRecovery(calculateSigRecovery(v, chainId))) {\n return false\n }\n\n const rBN = new BN(r)\n const sBN = new BN(s)\n\n if (rBN.isZero() || rBN.gt(SECP256K1_N) || sBN.isZero() || sBN.gt(SECP256K1_N)) {\n return false\n }\n\n if (homesteadOrLater && sBN.cmp(SECP256K1_N_DIV_2) === 1) {\n return false\n }\n\n return true\n}\n\n/**\n * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.\n * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`\n * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key\n * used to produce the signature.\n */\nexport const hashPersonalMessage = function (message: Buffer): Buffer {\n assertIsBuffer(message)\n const prefix = Buffer.from(`\\u0019Ethereum Signed Message:\\n${message.length}`, 'utf-8')\n return keccak(Buffer.concat([prefix, message]))\n}\n","import { BN } from './externals'\nimport { isHexString } from './internal'\nimport { Address } from './address'\nimport { unpadBuffer, toBuffer, ToBufferInputTypes } from './bytes'\n\n/*\n * A type that represents a BNLike input that can be converted to a BN.\n */\nexport type BNLike = BN | PrefixedHexString | number | Buffer\n\n/*\n * A type that represents a BufferLike input that can be converted to a Buffer.\n */\nexport type BufferLike =\n | Buffer\n | Uint8Array\n | number[]\n | number\n | BN\n | TransformableToBuffer\n | PrefixedHexString\n\n/*\n * A type that represents a `0x`-prefixed hex string.\n */\nexport type PrefixedHexString = string\n\n/**\n * A type that represents an Address-like value.\n * To convert to address, use `new Address(toBuffer(value))`\n */\nexport type AddressLike = Address | Buffer | PrefixedHexString\n\n/*\n * A type that represents an object that has a `toArray()` method.\n */\nexport interface TransformableToArray {\n toArray(): Uint8Array\n toBuffer?(): Buffer\n}\n\n/*\n * A type that represents an object that has a `toBuffer()` method.\n */\nexport interface TransformableToBuffer {\n toBuffer(): Buffer\n toArray?(): Uint8Array\n}\n\nexport type NestedUint8Array = Array\nexport type NestedBufferArray = Array\n\n/**\n * Convert BN to 0x-prefixed hex string.\n */\nexport function bnToHex(value: BN): PrefixedHexString {\n return `0x${value.toString(16)}`\n}\n\n/**\n * Convert value from BN to an unpadded Buffer\n * (useful for RLP transport)\n * @param value value to convert\n */\nexport function bnToUnpaddedBuffer(value: BN): Buffer {\n // Using `bn.toArrayLike(Buffer)` instead of `bn.toBuffer()`\n // for compatibility with browserify and similar tools\n return unpadBuffer(value.toArrayLike(Buffer))\n}\n\n/**\n * Deprecated alias for {@link bnToUnpaddedBuffer}\n * @deprecated\n */\nexport function bnToRlp(value: BN): Buffer {\n return bnToUnpaddedBuffer(value)\n}\n\n/**\n * Type output options\n */\nexport enum TypeOutput {\n Number,\n BN,\n Buffer,\n PrefixedHexString,\n}\n\nexport type TypeOutputReturnType = {\n [TypeOutput.Number]: number\n [TypeOutput.BN]: BN\n [TypeOutput.Buffer]: Buffer\n [TypeOutput.PrefixedHexString]: PrefixedHexString\n}\n\n/**\n * Convert an input to a specified type.\n * Input of null/undefined returns null/undefined regardless of the output type.\n * @param input value to convert\n * @param outputType type to output\n */\nexport function toType(input: null, outputType: T): null\nexport function toType(input: undefined, outputType: T): undefined\nexport function toType(\n input: ToBufferInputTypes,\n outputType: T\n): TypeOutputReturnType[T]\nexport function toType(\n input: ToBufferInputTypes,\n outputType: T\n): TypeOutputReturnType[T] | undefined | null {\n if (input === null) {\n return null\n }\n if (input === undefined) {\n return undefined\n }\n\n if (typeof input === 'string' && !isHexString(input)) {\n throw new Error(`A string must be provided with a 0x-prefix, given: ${input}`)\n } else if (typeof input === 'number' && !Number.isSafeInteger(input)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)'\n )\n }\n\n const output = toBuffer(input)\n\n if (outputType === TypeOutput.Buffer) {\n return output as TypeOutputReturnType[T]\n } else if (outputType === TypeOutput.BN) {\n return new BN(output) as TypeOutputReturnType[T]\n } else if (outputType === TypeOutput.Number) {\n const bn = new BN(output)\n const max = new BN(Number.MAX_SAFE_INTEGER.toString())\n if (bn.gt(max)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative output type)'\n )\n }\n return bn.toNumber() as TypeOutputReturnType[T]\n } else {\n // outputType === TypeOutput.PrefixedHexString\n return `0x${output.toString('hex')}` as TypeOutputReturnType[T]\n }\n}\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file contract.js\n *\n * To initialize a contract use:\n *\n * var Contract = require('web3-eth-contract');\n * Contract.setProvider('ws://localhost:8546');\n * var contract = new Contract(abi, address, ...);\n *\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar core = require('web3-core');\nvar Method = require('web3-core-method');\nvar utils = require('web3-utils');\nvar Subscription = require('web3-core-subscriptions').subscription;\nvar formatters = require('web3-core-helpers').formatters;\nvar errors = require('web3-core-helpers').errors;\nvar promiEvent = require('web3-core-promievent');\nvar abi = require('web3-eth-abi');\n/**\n * Should be called to create new contract instance\n *\n * @method Contract\n * @constructor\n * @param {Array} jsonInterface\n * @param {String} address\n * @param {Object} options\n */\nvar Contract = function Contract(jsonInterface, address, options) {\n var _this = this, args = Array.prototype.slice.call(arguments);\n if (!(this instanceof Contract)) {\n throw new Error('Please use the \"new\" keyword to instantiate a web3.eth.Contract() object!');\n }\n this.setProvider = function () {\n core.packageInit(_this, arguments);\n _this.clearSubscriptions = _this._requestManager.clearSubscriptions;\n };\n // sets _requestmanager\n core.packageInit(this, [this.constructor]);\n this.clearSubscriptions = this._requestManager.clearSubscriptions;\n if (!jsonInterface || !(Array.isArray(jsonInterface))) {\n throw errors.ContractMissingABIError();\n }\n // create the options object\n this.options = {};\n var lastArg = args[args.length - 1];\n if (!!lastArg && typeof lastArg === 'object' && !Array.isArray(lastArg)) {\n options = lastArg;\n this.options = { ...this.options, ...this._getOrSetDefaultOptions(options) };\n if (!!address && typeof address === 'object') {\n address = null;\n }\n }\n // set address\n Object.defineProperty(this.options, 'address', {\n set: function (value) {\n if (value) {\n _this._address = utils.toChecksumAddress(formatters.inputAddressFormatter(value));\n }\n },\n get: function () {\n return _this._address;\n },\n enumerable: true\n });\n // add method and event signatures, when the jsonInterface gets set\n Object.defineProperty(this.options, 'jsonInterface', {\n set: function (value) {\n _this.methods = {};\n _this.events = {};\n _this._jsonInterface = value.map(function (method) {\n var func, funcName;\n // make constant and payable backwards compatible\n method.constant = (method.stateMutability === \"view\" || method.stateMutability === \"pure\" || method.constant);\n method.payable = (method.stateMutability === \"payable\" || method.payable);\n if (method.name) {\n funcName = utils._jsonInterfaceMethodToString(method);\n }\n // function\n if (method.type === 'function') {\n method.signature = abi.encodeFunctionSignature(funcName);\n func = _this._createTxObject.bind({\n method: method,\n parent: _this\n });\n // add method only if not one already exists\n if (!_this.methods[method.name]) {\n _this.methods[method.name] = func;\n }\n else {\n var cascadeFunc = _this._createTxObject.bind({\n method: method,\n parent: _this,\n nextMethod: _this.methods[method.name]\n });\n _this.methods[method.name] = cascadeFunc;\n }\n // definitely add the method based on its signature\n _this.methods[method.signature] = func;\n // add method by name\n _this.methods[funcName] = func;\n // event\n }\n else if (method.type === 'event') {\n method.signature = abi.encodeEventSignature(funcName);\n var event = _this._on.bind(_this, method.signature);\n // add method only if not already exists\n if (!_this.events[method.name] || _this.events[method.name].name === 'bound ')\n _this.events[method.name] = event;\n // definitely add the method based on its signature\n _this.events[method.signature] = event;\n // add event by name\n _this.events[funcName] = event;\n }\n return method;\n });\n // add allEvents\n _this.events.allEvents = _this._on.bind(_this, 'allevents');\n return _this._jsonInterface;\n },\n get: function () {\n return _this._jsonInterface;\n },\n enumerable: true\n });\n // get default account from the Class\n var defaultAccount = this.constructor.defaultAccount;\n var defaultBlock = this.constructor.defaultBlock || 'latest';\n Object.defineProperty(this, 'handleRevert', {\n get: function () {\n if (_this.options.handleRevert === false || _this.options.handleRevert === true) {\n return _this.options.handleRevert;\n }\n return this.constructor.handleRevert;\n },\n set: function (val) {\n _this.options.handleRevert = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultCommon', {\n get: function () {\n return _this.options.common || this.constructor.defaultCommon;\n },\n set: function (val) {\n _this.options.common = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultHardfork', {\n get: function () {\n return _this.options.hardfork || this.constructor.defaultHardfork;\n },\n set: function (val) {\n _this.options.hardfork = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultChain', {\n get: function () {\n return _this.options.chain || this.constructor.defaultChain;\n },\n set: function (val) {\n _this.options.chain = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionPollingTimeout', {\n get: function () {\n if (_this.options.transactionPollingTimeout === 0) {\n return _this.options.transactionPollingTimeout;\n }\n return _this.options.transactionPollingTimeout || this.constructor.transactionPollingTimeout;\n },\n set: function (val) {\n _this.options.transactionPollingTimeout = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionPollingInterval', {\n get: function () {\n if (_this.options.transactionPollingInterval === 0) {\n return _this.options.transactionPollingInterval;\n }\n return _this.options.transactionPollingInterval || this.constructor.transactionPollingInterval;\n },\n set: function (val) {\n _this.options.transactionPollingInterval = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionConfirmationBlocks', {\n get: function () {\n if (_this.options.transactionConfirmationBlocks === 0) {\n return _this.options.transactionConfirmationBlocks;\n }\n return _this.options.transactionConfirmationBlocks || this.constructor.transactionConfirmationBlocks;\n },\n set: function (val) {\n _this.options.transactionConfirmationBlocks = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionBlockTimeout', {\n get: function () {\n if (_this.options.transactionBlockTimeout === 0) {\n return _this.options.transactionBlockTimeout;\n }\n return _this.options.transactionBlockTimeout || this.constructor.transactionBlockTimeout;\n },\n set: function (val) {\n _this.options.transactionBlockTimeout = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'blockHeaderTimeout', {\n get: function () {\n if (_this.options.blockHeaderTimeout === 0) {\n return _this.options.blockHeaderTimeout;\n }\n return _this.options.blockHeaderTimeout || this.constructor.blockHeaderTimeout;\n },\n set: function (val) {\n _this.options.blockHeaderTimeout = val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultAccount', {\n get: function () {\n return defaultAccount;\n },\n set: function (val) {\n if (val) {\n defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val));\n }\n return val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultBlock', {\n get: function () {\n return defaultBlock;\n },\n set: function (val) {\n defaultBlock = val;\n return val;\n },\n enumerable: true\n });\n // properties\n this.methods = {};\n this.events = {};\n this._address = null;\n this._jsonInterface = [];\n // set getter/setter properties\n this.options.address = address;\n this.options.jsonInterface = jsonInterface;\n};\n/**\n * Sets the new provider, creates a new requestManager, registers the \"data\" listener on the provider and sets the\n * accounts module for the Contract class.\n *\n * @method setProvider\n *\n * @param {string|provider} provider\n * @param {Accounts} accounts\n *\n * @returns void\n */\nContract.setProvider = function (provider, accounts) {\n // Contract.currentProvider = provider;\n core.packageInit(this, [provider]);\n this._ethAccounts = accounts;\n};\n/**\n * Get the callback and modify the array if necessary\n *\n * @method _getCallback\n * @param {Array} args\n * @return {Function} the callback\n */\nContract.prototype._getCallback = function getCallback(args) {\n if (args && !!args[args.length - 1] && typeof args[args.length - 1] === 'function') {\n return args.pop(); // modify the args array!\n }\n};\n/**\n * Checks that no listener with name \"newListener\" or \"removeListener\" is added.\n *\n * @method _checkListener\n * @param {String} type\n * @param {String} event\n * @return {Object} the contract instance\n */\nContract.prototype._checkListener = function (type, event) {\n if (event === type) {\n throw errors.ContractReservedEventError(type);\n }\n};\n/**\n * Use default values, if options are not available\n *\n * @method _getOrSetDefaultOptions\n * @param {Object} options the options gived by the user\n * @return {Object} the options with gaps filled by defaults\n */\nContract.prototype._getOrSetDefaultOptions = function getOrSetDefaultOptions(options) {\n var gasPrice = options.gasPrice ? String(options.gasPrice) : null;\n var from = options.from ? utils.toChecksumAddress(formatters.inputAddressFormatter(options.from)) : null;\n options.data = options.data || this.options.data;\n options.from = from || this.options.from;\n options.gasPrice = gasPrice || this.options.gasPrice;\n options.gas = options.gas || options.gasLimit || this.options.gas;\n // TODO replace with only gasLimit?\n delete options.gasLimit;\n return options;\n};\n/**\n * Should be used to encode indexed params and options to one final object\n *\n * @method _encodeEventABI\n * @param {Object} event\n * @param {Object} options\n * @return {Object} everything combined together and encoded\n */\nContract.prototype._encodeEventABI = function (event, options) {\n options = options || {};\n var filter = options.filter || {}, result = {};\n ['fromBlock', 'toBlock'].filter(function (f) {\n return options[f] !== undefined;\n }).forEach(function (f) {\n result[f] = formatters.inputBlockNumberFormatter(options[f]);\n });\n // use given topics\n if (Array.isArray(options.topics)) {\n result.topics = options.topics;\n // create topics based on filter\n }\n else {\n result.topics = [];\n // add event signature\n if (event && !event.anonymous && event.name !== 'ALLEVENTS') {\n result.topics.push(event.signature);\n }\n // add event topics (indexed arguments)\n if (event.name !== 'ALLEVENTS') {\n var indexedTopics = event.inputs.filter(function (i) {\n return i.indexed === true;\n }).map(function (i) {\n var value = filter[i.name];\n if (!value) {\n return null;\n }\n // TODO: https://github.com/ethereum/web3.js/issues/344\n // TODO: deal properly with components\n if (Array.isArray(value)) {\n return value.map(function (v) {\n return abi.encodeParameter(i.type, v);\n });\n }\n return abi.encodeParameter(i.type, value);\n });\n result.topics = result.topics.concat(indexedTopics);\n }\n if (!result.topics.length)\n delete result.topics;\n }\n if (this.options.address) {\n result.address = this.options.address.toLowerCase();\n }\n return result;\n};\n/**\n * Should be used to decode indexed params and options\n *\n * @method _decodeEventABI\n * @param {Object} data\n * @return {Object} result object with decoded indexed && not indexed params\n */\nContract.prototype._decodeEventABI = function (data) {\n var event = this;\n data.data = data.data || '';\n data.topics = data.topics || [];\n var result = formatters.outputLogFormatter(data);\n // if allEvents get the right event\n if (event.name === 'ALLEVENTS') {\n event = event.jsonInterface.find(function (intf) {\n return (intf.signature === data.topics[0]);\n }) || { anonymous: true };\n }\n // create empty inputs if none are present (e.g. anonymous events on allEvents)\n event.inputs = event.inputs || [];\n // Handle case where an event signature shadows the current ABI with non-identical\n // arg indexing. If # of topics doesn't match, event is anon.\n if (!event.anonymous) {\n let indexedInputs = 0;\n event.inputs.forEach(input => input.indexed ? indexedInputs++ : null);\n if (indexedInputs > 0 && (data.topics.length !== indexedInputs + 1)) {\n event = {\n anonymous: true,\n inputs: []\n };\n }\n }\n var argTopics = event.anonymous ? data.topics : data.topics.slice(1);\n result.returnValues = abi.decodeLog(event.inputs, data.data, argTopics);\n delete result.returnValues.__length__;\n // add name\n result.event = event.name;\n // add signature\n result.signature = (event.anonymous || !data.topics[0]) ? null : data.topics[0];\n // move the data and topics to \"raw\"\n result.raw = {\n data: result.data,\n topics: result.topics\n };\n delete result.data;\n delete result.topics;\n return result;\n};\n/**\n * Encodes an ABI for a method, including signature or the method.\n * Or when constructor encodes only the constructor parameters.\n *\n * @method _encodeMethodABI\n * @param {Mixed} args the arguments to encode\n * @param {String} the encoded ABI\n */\nContract.prototype._encodeMethodABI = function _encodeMethodABI() {\n var methodSignature = this._method.signature, args = this.arguments || [];\n var signature = false, paramsABI = this._parent.options.jsonInterface.filter(function (json) {\n return ((methodSignature === 'constructor' && json.type === methodSignature) ||\n ((json.signature === methodSignature || json.signature === methodSignature.replace('0x', '') || json.name === methodSignature) && json.type === 'function'));\n }).map(function (json) {\n var inputLength = (Array.isArray(json.inputs)) ? json.inputs.length : 0;\n if (inputLength !== args.length) {\n throw new Error('The number of arguments is not matching the methods required number. You need to pass ' + inputLength + ' arguments.');\n }\n if (json.type === 'function') {\n signature = json.signature;\n }\n return Array.isArray(json.inputs) ? json.inputs : [];\n }).map(function (inputs) {\n return abi.encodeParameters(inputs, args).replace('0x', '');\n })[0] || '';\n // return constructor\n if (methodSignature === 'constructor') {\n if (!this._deployData)\n throw new Error('The contract has no contract data option set. This is necessary to append the constructor parameters.');\n if (!this._deployData.startsWith('0x')) {\n this._deployData = '0x' + this._deployData;\n }\n return this._deployData + paramsABI;\n }\n // return method\n var returnValue = (signature) ? signature + paramsABI : paramsABI;\n if (!returnValue) {\n throw new Error('Couldn\\'t find a matching contract method named \"' + this._method.name + '\".');\n }\n return returnValue;\n};\n/**\n * Decode method return values\n *\n * @method _decodeMethodReturn\n * @param {Array} outputs\n * @param {String} returnValues\n * @return {Object} decoded output return values\n */\nContract.prototype._decodeMethodReturn = function (outputs, returnValues) {\n if (!returnValues) {\n return null;\n }\n returnValues = returnValues.length >= 2 ? returnValues.slice(2) : returnValues;\n var result = abi.decodeParameters(outputs, returnValues);\n if (result.__length__ === 1) {\n return result[0];\n }\n delete result.__length__;\n return result;\n};\n/**\n * Deploys a contract and fire events based on its state: transactionHash, receipt\n *\n * All event listeners will be removed, once the last possible event is fired (\"error\", or \"receipt\")\n *\n * @method deploy\n * @param {Object} options\n * @param {Function} callback\n * @return {Object} EventEmitter possible events are \"error\", \"transactionHash\" and \"receipt\"\n */\nContract.prototype.deploy = function (options, callback) {\n options = options || {};\n options.arguments = options.arguments || [];\n options = this._getOrSetDefaultOptions(options);\n // throw error, if no \"data\" is specified\n if (!options.data) {\n if (typeof callback === 'function') {\n return callback(errors.ContractMissingDeployDataError());\n }\n throw errors.ContractMissingDeployDataError();\n }\n var constructor = this.options.jsonInterface.find((method) => {\n return (method.type === 'constructor');\n }) || {};\n constructor.signature = 'constructor';\n return this._createTxObject.apply({\n method: constructor,\n parent: this,\n deployData: options.data,\n _ethAccounts: this.constructor._ethAccounts\n }, options.arguments);\n};\n/**\n * Gets the event signature and outputFormatters\n *\n * @method _generateEventOptions\n * @param {Object} event\n * @param {Object} options\n * @param {Function} callback\n * @return {Object} the event options object\n */\nContract.prototype._generateEventOptions = function () {\n var args = Array.prototype.slice.call(arguments);\n // get the callback\n var callback = this._getCallback(args);\n // get the options\n var options = (!!args[args.length - 1] && typeof args[args.length - 1]) === 'object' ? args.pop() : {};\n var eventName = (typeof args[0] === 'string') ? args[0] : 'allevents';\n var event = (eventName.toLowerCase() === 'allevents') ? {\n name: 'ALLEVENTS',\n jsonInterface: this.options.jsonInterface\n } : this.options.jsonInterface.find(function (json) {\n return (json.type === 'event' && (json.name === eventName || json.signature === '0x' + eventName.replace('0x', '')));\n });\n if (!event) {\n throw errors.ContractEventDoesNotExistError(eventName);\n }\n if (!utils.isAddress(this.options.address)) {\n throw errors.ContractNoAddressDefinedError();\n }\n return {\n params: this._encodeEventABI(event, options),\n event: event,\n callback: callback\n };\n};\n/**\n * Adds event listeners and creates a subscription, and remove it once its fired.\n *\n * @method clone\n * @return {Object} the event subscription\n */\nContract.prototype.clone = function () {\n return new this.constructor(this.options.jsonInterface, this.options.address, this.options);\n};\n/**\n * Adds event listeners and creates a subscription, and remove it once its fired.\n *\n * @method once\n * @param {String} event\n * @param {Object} options\n * @param {Function} callback\n * @return {Object} the event subscription\n */\nContract.prototype.once = function (event, options, callback) {\n var args = Array.prototype.slice.call(arguments);\n // get the callback\n callback = this._getCallback(args);\n if (!callback) {\n throw errors.ContractOnceRequiresCallbackError();\n }\n // don't allow fromBlock\n if (options)\n delete options.fromBlock;\n // don't return as once shouldn't provide \"on\"\n this._on(event, options, function (err, res, sub) {\n sub.unsubscribe();\n if (typeof callback === 'function') {\n callback(err, res, sub);\n }\n });\n return undefined;\n};\n/**\n * Adds event listeners and creates a subscription.\n *\n * @method _on\n *\n * @param {String} event\n * @param {Object} options\n * @param {Function} callback\n *\n * @return {Object} the event subscription\n */\nContract.prototype._on = function () {\n var subOptions = this._generateEventOptions.apply(this, arguments);\n if (subOptions.params && subOptions.params.toBlock) {\n delete subOptions.params.toBlock;\n console.warn('Invalid option: toBlock. Use getPastEvents for specific range.');\n }\n // prevent the event \"newListener\" and \"removeListener\" from being overwritten\n this._checkListener('newListener', subOptions.event.name);\n this._checkListener('removeListener', subOptions.event.name);\n // TODO check if listener already exists? and reuse subscription if options are the same.\n // create new subscription\n var subscription = new Subscription({\n subscription: {\n params: 1,\n inputFormatter: [formatters.inputLogFormatter],\n outputFormatter: this._decodeEventABI.bind(subOptions.event),\n // DUBLICATE, also in web3-eth\n subscriptionHandler: function (output) {\n if (output.removed) {\n this.emit('changed', output);\n }\n else {\n this.emit('data', output);\n }\n if (typeof this.callback === 'function') {\n this.callback(null, output, this);\n }\n }\n },\n type: 'eth',\n requestManager: this._requestManager\n });\n subscription.subscribe('logs', subOptions.params, subOptions.callback || function () { });\n return subscription;\n};\n/**\n * Get past events from contracts\n *\n * @method getPastEvents\n * @param {String} event\n * @param {Object} options\n * @param {Function} callback\n * @return {Object} the promievent\n */\nContract.prototype.getPastEvents = function () {\n var subOptions = this._generateEventOptions.apply(this, arguments);\n var getPastLogs = new Method({\n name: 'getPastLogs',\n call: 'eth_getLogs',\n params: 1,\n inputFormatter: [formatters.inputLogFormatter],\n outputFormatter: this._decodeEventABI.bind(subOptions.event)\n });\n getPastLogs.setRequestManager(this._requestManager);\n var call = getPastLogs.buildCall();\n getPastLogs = null;\n return call(subOptions.params, subOptions.callback);\n};\n/**\n * returns the an object with call, send, estimate functions\n *\n * @method _createTxObject\n * @returns {Object} an object with functions to call the methods\n */\nContract.prototype._createTxObject = function _createTxObject() {\n var args = Array.prototype.slice.call(arguments);\n var txObject = {};\n if (this.method.type === 'function') {\n txObject.call = this.parent._executeMethod.bind(txObject, 'call');\n txObject.call.request = this.parent._executeMethod.bind(txObject, 'call', true); // to make batch requests\n }\n txObject.send = this.parent._executeMethod.bind(txObject, 'send');\n txObject.send.request = this.parent._executeMethod.bind(txObject, 'send', true); // to make batch requests\n txObject.encodeABI = this.parent._encodeMethodABI.bind(txObject);\n txObject.estimateGas = this.parent._executeMethod.bind(txObject, 'estimate');\n txObject.createAccessList = this.parent._executeMethod.bind(txObject, 'createAccessList');\n if (args && this.method.inputs && args.length !== this.method.inputs.length) {\n if (this.nextMethod) {\n return this.nextMethod.apply(null, args);\n }\n throw errors.InvalidNumberOfParams(args.length, this.method.inputs.length, this.method.name);\n }\n txObject.arguments = args || [];\n txObject._method = this.method;\n txObject._parent = this.parent;\n txObject._ethAccounts = this.parent.constructor._ethAccounts || this._ethAccounts;\n if (this.deployData) {\n txObject._deployData = this.deployData;\n }\n return txObject;\n};\n/**\n * Generates the options for the execute call\n *\n * @method _processExecuteArguments\n * @param {Array} args\n * @param {Promise} defer\n */\nContract.prototype._processExecuteArguments = function _processExecuteArguments(args, defer) {\n var processedArgs = {};\n processedArgs.type = args.shift();\n // get the callback\n processedArgs.callback = this._parent._getCallback(args);\n // get block number to use for call\n if (processedArgs.type === 'call' && args[args.length - 1] !== true && (typeof args[args.length - 1] === 'string' || isFinite(args[args.length - 1])))\n processedArgs.defaultBlock = args.pop();\n // get the options\n processedArgs.options = (!!args[args.length - 1] && typeof args[args.length - 1]) === 'object' ? args.pop() : {};\n // get the generateRequest argument for batch requests\n processedArgs.generateRequest = (args[args.length - 1] === true) ? args.pop() : false;\n processedArgs.options = this._parent._getOrSetDefaultOptions(processedArgs.options);\n processedArgs.options.data = this.encodeABI();\n // add contract address\n if (!this._deployData && !utils.isAddress(this._parent.options.address))\n throw errors.ContractNoAddressDefinedError();\n if (!this._deployData)\n processedArgs.options.to = this._parent.options.address;\n // return error, if no \"data\" is specified\n if (!processedArgs.options.data)\n return utils._fireError(new Error('Couldn\\'t find a matching contract method, or the number of parameters is wrong.'), defer.eventEmitter, defer.reject, processedArgs.callback);\n return processedArgs;\n};\n/**\n * Executes a call, transact or estimateGas on a contract function\n *\n * @method _executeMethod\n * @param {String} type the type this execute function should execute\n * @param {Boolean} makeRequest if true, it simply returns the request parameters, rather than executing it\n */\nContract.prototype._executeMethod = function _executeMethod() {\n var _this = this, args = this._parent._processExecuteArguments.call(this, Array.prototype.slice.call(arguments), defer), defer = promiEvent((args.type !== 'send')), ethAccounts = _this.constructor._ethAccounts || _this._ethAccounts;\n // simple return request for batch requests\n if (args.generateRequest) {\n var payload = {\n params: [formatters.inputCallFormatter.call(this._parent, args.options)],\n callback: args.callback\n };\n if (args.type === 'call') {\n payload.params.push(formatters.inputDefaultBlockNumberFormatter.call(this._parent, args.defaultBlock));\n payload.method = 'eth_call';\n payload.format = this._parent._decodeMethodReturn.bind(null, this._method.outputs);\n }\n else {\n payload.method = 'eth_sendTransaction';\n }\n return payload;\n }\n switch (args.type) {\n case 'createAccessList':\n // return error, if no \"from\" is specified\n if (!utils.isAddress(args.options.from)) {\n return utils._fireError(errors.ContractNoFromAddressDefinedError(), defer.eventEmitter, defer.reject, args.callback);\n }\n var createAccessList = (new Method({\n name: 'createAccessList',\n call: 'eth_createAccessList',\n params: 2,\n inputFormatter: [formatters.inputTransactionFormatter, formatters.inputDefaultBlockNumberFormatter],\n requestManager: _this._parent._requestManager,\n accounts: ethAccounts,\n defaultAccount: _this._parent.defaultAccount,\n defaultBlock: _this._parent.defaultBlock\n })).createFunction();\n return createAccessList(args.options, args.callback);\n case 'estimate':\n var estimateGas = (new Method({\n name: 'estimateGas',\n call: 'eth_estimateGas',\n params: 1,\n inputFormatter: [formatters.inputCallFormatter],\n outputFormatter: utils.hexToNumber,\n requestManager: _this._parent._requestManager,\n accounts: ethAccounts,\n defaultAccount: _this._parent.defaultAccount,\n defaultBlock: _this._parent.defaultBlock\n })).createFunction();\n return estimateGas(args.options, args.callback);\n case 'call':\n // TODO check errors: missing \"from\" should give error on deploy and send, call ?\n var call = (new Method({\n name: 'call',\n call: 'eth_call',\n params: 2,\n inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter],\n // add output formatter for decoding\n outputFormatter: function (result) {\n return _this._parent._decodeMethodReturn(_this._method.outputs, result);\n },\n requestManager: _this._parent._requestManager,\n accounts: ethAccounts,\n defaultAccount: _this._parent.defaultAccount,\n defaultBlock: _this._parent.defaultBlock,\n handleRevert: _this._parent.handleRevert,\n abiCoder: abi\n })).createFunction();\n return call(args.options, args.defaultBlock, args.callback);\n case 'send':\n // return error, if no \"from\" is specified\n if (!utils.isAddress(args.options.from)) {\n return utils._fireError(errors.ContractNoFromAddressDefinedError(), defer.eventEmitter, defer.reject, args.callback);\n }\n if (typeof this._method.payable === 'boolean' && !this._method.payable && args.options.value && args.options.value > 0) {\n return utils._fireError(new Error('Can not send value to non-payable contract method or constructor'), defer.eventEmitter, defer.reject, args.callback);\n }\n // make sure receipt logs are decoded\n var extraFormatters = {\n receiptFormatter: function (receipt) {\n if (Array.isArray(receipt.logs)) {\n // decode logs\n var events = receipt.logs.map((log) => {\n return _this._parent._decodeEventABI.call({\n name: 'ALLEVENTS',\n jsonInterface: _this._parent.options.jsonInterface\n }, log);\n });\n // make log names keys\n receipt.events = {};\n var count = 0;\n events.forEach(function (ev) {\n if (ev.event) {\n // if > 1 of the same event, don't overwrite any existing events\n if (receipt.events[ev.event]) {\n if (Array.isArray(receipt.events[ev.event])) {\n receipt.events[ev.event].push(ev);\n }\n else {\n receipt.events[ev.event] = [receipt.events[ev.event], ev];\n }\n }\n else {\n receipt.events[ev.event] = ev;\n }\n }\n else {\n receipt.events[count] = ev;\n count++;\n }\n });\n delete receipt.logs;\n }\n return receipt;\n },\n contractDeployFormatter: function (receipt) {\n var newContract = _this._parent.clone();\n newContract.options.address = receipt.contractAddress;\n return newContract;\n }\n };\n var sendTransaction = (new Method({\n name: 'sendTransaction',\n call: 'eth_sendTransaction',\n params: 1,\n inputFormatter: [formatters.inputTransactionFormatter],\n requestManager: _this._parent._requestManager,\n accounts: _this.constructor._ethAccounts || _this._ethAccounts,\n defaultAccount: _this._parent.defaultAccount,\n defaultBlock: _this._parent.defaultBlock,\n transactionBlockTimeout: _this._parent.transactionBlockTimeout,\n transactionConfirmationBlocks: _this._parent.transactionConfirmationBlocks,\n transactionPollingTimeout: _this._parent.transactionPollingTimeout,\n transactionPollingInterval: _this._parent.transactionPollingInterval,\n defaultCommon: _this._parent.defaultCommon,\n defaultChain: _this._parent.defaultChain,\n defaultHardfork: _this._parent.defaultHardfork,\n handleRevert: _this._parent.handleRevert,\n extraFormatters: extraFormatters,\n abiCoder: abi\n })).createFunction();\n return sendTransaction(args.options, args.callback);\n default:\n throw new Error('Method \"' + args.type + '\" not implemented.');\n }\n};\nmodule.exports = Contract;\n","/*\n This file is part of web3.js.\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file ENS.js\n *\n * @author Samuel Furter \n * @date 2018\n */\n\"use strict\";\nvar config = require('./config');\nvar formatters = require('web3-core-helpers').formatters;\nvar utils = require('web3-utils');\nvar Registry = require('./contracts/Registry');\nvar ResolverMethodHandler = require('./lib/ResolverMethodHandler');\nvar contenthash = require('./lib/contentHash');\n/**\n * Constructs a new instance of ENS\n *\n * @param {Eth} eth\n *\n * @constructor\n */\nfunction ENS(eth) {\n this.eth = eth;\n var registryAddress = null;\n this._detectedAddress = null;\n this._lastSyncCheck = null;\n Object.defineProperty(this, 'registry', {\n get: function () {\n return new Registry(this);\n },\n enumerable: true\n });\n Object.defineProperty(this, 'resolverMethodHandler', {\n get: function () {\n return new ResolverMethodHandler(this.registry);\n },\n enumerable: true\n });\n Object.defineProperty(this, 'registryAddress', {\n get: function () {\n return registryAddress;\n },\n set: function (value) {\n if (value === null) {\n registryAddress = value;\n return;\n }\n registryAddress = formatters.inputAddressFormatter(value);\n },\n enumerable: true\n });\n}\n/**\n * Returns true if the given interfaceId is supported and otherwise false.\n *\n * @method supportsInterface\n *\n * @param {string} name\n * @param {string} interfaceId\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nENS.prototype.supportsInterface = function (name, interfaceId, callback) {\n return this.getResolver(name).then(function (resolver) {\n if (!utils.isHexStrict(interfaceId)) {\n interfaceId = utils.sha3(interfaceId).slice(0, 10);\n }\n return resolver.methods.supportsInterface(interfaceId).call(callback);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n throw error;\n });\n};\n/**\n * Returns the Resolver by the given address\n *\n * @deprecated Please use the \"getResolver\" method instead of \"resolver\"\n *\n * @method resolver\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nENS.prototype.resolver = function (name, callback) {\n return this.registry.resolver(name, callback);\n};\n/**\n * Returns the Resolver by the given address\n *\n * @method getResolver\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nENS.prototype.getResolver = function (name, callback) {\n return this.registry.getResolver(name, callback);\n};\n/**\n * Does set the resolver of the given name\n *\n * @method setResolver\n *\n * @param {string} name\n * @param {string} address\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setResolver = function (name, address, txConfig, callback) {\n return this.registry.setResolver(name, address, txConfig, callback);\n};\n/**\n * Sets the owner, resolver, and TTL for an ENS record in a single operation.\n *\n * @method setRecord\n *\n * @param {string} name\n * @param {string} owner\n * @param {string} resolver\n * @param {string | number} ttl\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setRecord = function (name, owner, resolver, ttl, txConfig, callback) {\n return this.registry.setRecord(name, owner, resolver, ttl, txConfig, callback);\n};\n/**\n * Sets the owner, resolver and TTL for a subdomain, creating it if necessary.\n *\n * @method setSubnodeRecord\n *\n * @param {string} name\n * @param {string} label\n * @param {string} owner\n * @param {string} resolver\n * @param {string | number} ttl\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setSubnodeRecord = function (name, label, owner, resolver, ttl, txConfig, callback) {\n return this.registry.setSubnodeRecord(name, label, owner, resolver, ttl, txConfig, callback);\n};\n/**\n * Sets or clears an approval by the given operator.\n *\n * @method setApprovalForAll\n *\n * @param {string} operator\n * @param {boolean} approved\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setApprovalForAll = function (operator, approved, txConfig, callback) {\n return this.registry.setApprovalForAll(operator, approved, txConfig, callback);\n};\n/**\n * Returns true if the operator is approved\n *\n * @method isApprovedForAll\n *\n * @param {string} owner\n * @param {string} operator\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nENS.prototype.isApprovedForAll = function (owner, operator, callback) {\n return this.registry.isApprovedForAll(owner, operator, callback);\n};\n/**\n * Returns true if the record exists\n *\n * @method recordExists\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nENS.prototype.recordExists = function (name, callback) {\n return this.registry.recordExists(name, callback);\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method setSubnodeOwner\n *\n * @param {string} name\n * @param {string} label\n * @param {string} address\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setSubnodeOwner = function (name, label, address, txConfig, callback) {\n return this.registry.setSubnodeOwner(name, label, address, txConfig, callback);\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method getTTL\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.getTTL = function (name, callback) {\n return this.registry.getTTL(name, callback);\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method setTTL\n *\n * @param {string} name\n * @param {number} ttl\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setTTL = function (name, ttl, txConfig, callback) {\n return this.registry.setTTL(name, ttl, txConfig, callback);\n};\n/**\n * Returns the owner by the given name and current configured or detected Registry\n *\n * @method getOwner\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.getOwner = function (name, callback) {\n return this.registry.getOwner(name, callback);\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method setOwner\n *\n * @param {string} name\n * @param {string} address\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setOwner = function (name, address, txConfig, callback) {\n return this.registry.setOwner(name, address, txConfig, callback);\n};\n/**\n * Returns the address record associated with a name.\n *\n * @method getAddress\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.getAddress = function (name, callback) {\n return this.resolverMethodHandler.method(name, 'addr', []).call(callback);\n};\n/**\n * Sets a new address\n *\n * @method setAddress\n *\n * @param {string} name\n * @param {string} address\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setAddress = function (name, address, txConfig, callback) {\n return this.resolverMethodHandler.method(name, 'setAddr', [address]).send(txConfig, callback);\n};\n/**\n * Returns the public key\n *\n * @method getPubkey\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.getPubkey = function (name, callback) {\n return this.resolverMethodHandler.method(name, 'pubkey', [], null, callback).call(callback);\n};\n/**\n * Set the new public key\n *\n * @method setPubkey\n *\n * @param {string} name\n * @param {string} x\n * @param {string} y\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setPubkey = function (name, x, y, txConfig, callback) {\n return this.resolverMethodHandler.method(name, 'setPubkey', [x, y]).send(txConfig, callback);\n};\n/**\n * Returns the content\n *\n * @method getContent\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.getContent = function (name, callback) {\n return this.resolverMethodHandler.method(name, 'content', []).call(callback);\n};\n/**\n * Set the content\n *\n * @method setContent\n *\n * @param {string} name\n * @param {string} hash\n * @param {function} callback\n * @param {TransactionConfig} txConfig\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setContent = function (name, hash, txConfig, callback) {\n return this.resolverMethodHandler.method(name, 'setContent', [hash]).send(txConfig, callback);\n};\n/**\n * Returns the contenthash\n *\n * @method getContenthash\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.getContenthash = function (name, callback) {\n return this.resolverMethodHandler.method(name, 'contenthash', [], contenthash.decode).call(callback);\n};\n/**\n * Set the contenthash\n *\n * @method setContent\n *\n * @param {string} name\n * @param {string} hash\n * @param {function} callback\n * @param {TransactionConfig} txConfig\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setContenthash = function (name, hash, txConfig, callback) {\n var encoded;\n try {\n encoded = contenthash.encode(hash);\n }\n catch (err) {\n var error = new Error('Could not encode ' + hash + '. See docs for supported hash protocols.');\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n throw error;\n }\n return this.resolverMethodHandler.method(name, 'setContenthash', [encoded]).send(txConfig, callback);\n};\n/**\n * Get the multihash\n *\n * @method getMultihash\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.getMultihash = function (name, callback) {\n return this.resolverMethodHandler.method(name, 'multihash', []).call(callback);\n};\n/**\n * Set the multihash\n *\n * @method setMultihash\n *\n * @param {string} name\n * @param {string} hash\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nENS.prototype.setMultihash = function (name, hash, txConfig, callback) {\n return this.resolverMethodHandler.method(name, 'multihash', [hash]).send(txConfig, callback);\n};\n/**\n * Checks if the current used network is synced and looks for ENS support there.\n * Throws an error if not.\n *\n * @returns {Promise}\n */\nENS.prototype.checkNetwork = async function () {\n var now = new Date() / 1000;\n if (!this._lastSyncCheck || (now - this._lastSyncCheck) > 3600) {\n var block = await this.eth.getBlock('latest');\n var headAge = now - block.timestamp;\n if (headAge > 3600) {\n throw new Error(\"Network not synced; last block was \" + headAge + \" seconds ago\");\n }\n this._lastSyncCheck = now;\n }\n if (this.registryAddress) {\n return this.registryAddress;\n }\n if (!this._detectedAddress) {\n var networkType = await this.eth.net.getNetworkType();\n var addr = config.addresses[networkType];\n if (typeof addr === 'undefined') {\n throw new Error(\"ENS is not supported on network \" + networkType);\n }\n this._detectedAddress = addr;\n return this._detectedAddress;\n }\n return this._detectedAddress;\n};\nmodule.exports = ENS;\n","/*\n This file is part of web3.js.\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file config.js\n *\n * @author Samuel Furter \n * @date 2017\n */\n\"use strict\";\n/**\n * Source: https://docs.ens.domains/ens-deployments\n *\n * @type {{addresses: {main: string, rinkeby: string, goerli: string, ropsten: string}}}\n */\nvar config = {\n addresses: {\n main: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n ropsten: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n rinkeby: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\",\n goerli: \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\"\n },\n // These ids obtained at ensdomains docs:\n // https://docs.ens.domains/contract-developer-guide/writing-a-resolver\n interfaceIds: {\n addr: \"0x3b3b57de\",\n setAddr: \"0x3b3b57de\",\n pubkey: \"0xc8690233\",\n setPubkey: \"0xc8690233\",\n contenthash: \"0xbc1c58d1\",\n setContenthash: \"0xbc1c58d1\",\n content: \"0xd8389dc5\",\n setContent: \"0xd8389dc5\"\n }\n};\nmodule.exports = config;\n","/*\n This file is part of web3.js.\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file Registry.js\n *\n * @author Samuel Furter \n * @date 2018\n */\n\"use strict\";\nvar Contract = require('web3-eth-contract');\nvar namehash = require('eth-ens-namehash');\nvar PromiEvent = require('web3-core-promievent');\nvar formatters = require('web3-core-helpers').formatters;\nvar utils = require('web3-utils');\nvar REGISTRY_ABI = require('../resources/ABI/Registry');\nvar RESOLVER_ABI = require('../resources/ABI/Resolver');\n/**\n * A wrapper around the ENS registry contract.\n *\n * @method Registry\n * @param {Ens} ens\n * @constructor\n */\nfunction Registry(ens) {\n var self = this;\n this.ens = ens;\n this.contract = ens.checkNetwork().then(function (address) {\n var contract = new Contract(REGISTRY_ABI, address);\n contract.setProvider(self.ens.eth.currentProvider);\n return contract;\n });\n}\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @deprecated Please use the \"getOwner\" method instead of \"owner\"\n *\n * @method owner\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nRegistry.prototype.owner = function (name, callback) {\n console.warn('Deprecated: Please use the \"getOwner\" method instead of \"owner\".');\n return this.getOwner(name, callback);\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method getOwner\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nRegistry.prototype.getOwner = function (name, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.owner(namehash.hash(name)).call();\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method setOwner\n *\n * @param {string} name\n * @param {string} address\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nRegistry.prototype.setOwner = function (name, address, txConfig, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.setOwner(namehash.hash(name), formatters.inputAddressFormatter(address)).send(txConfig);\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Returns the TTL of the given node by his name\n *\n * @method getTTL\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returnss {Promise}\n */\nRegistry.prototype.getTTL = function (name, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.ttl(namehash.hash(name)).call();\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method setTTL\n *\n * @param {string} name\n * @param {number} ttl\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nRegistry.prototype.setTTL = function (name, ttl, txConfig, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.setTTL(namehash.hash(name), ttl).send(txConfig);\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method setSubnodeOwner\n *\n * @param {string} name\n * @param {string} label\n * @param {string} address\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nRegistry.prototype.setSubnodeOwner = function (name, label, address, txConfig, callback) {\n var promiEvent = new PromiEvent(true);\n if (!utils.isHexStrict(label)) {\n label = utils.sha3(label);\n }\n this.contract.then(function (contract) {\n return contract.methods.setSubnodeOwner(namehash.hash(name), label, formatters.inputAddressFormatter(address)).send(txConfig);\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Sets the owner, resolver, and TTL for an ENS record in a single operation.\n *\n * @method setRecord\n *\n * @param {string} name\n * @param {string} owner\n * @param {string} resolver\n * @param {string | number} ttl\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nRegistry.prototype.setRecord = function (name, owner, resolver, ttl, txConfig, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.setRecord(namehash.hash(name), formatters.inputAddressFormatter(owner), formatters.inputAddressFormatter(resolver), ttl).send(txConfig);\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Sets the owner, resolver and TTL for a subdomain, creating it if necessary.\n *\n * @method setSubnodeRecord\n *\n * @param {string} name\n * @param {string} label\n * @param {string} owner\n * @param {string} resolver\n * @param {string | number} ttl\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nRegistry.prototype.setSubnodeRecord = function (name, label, owner, resolver, ttl, txConfig, callback) {\n var promiEvent = new PromiEvent(true);\n if (!utils.isHexStrict(label)) {\n label = utils.sha3(label);\n }\n this.contract.then(function (contract) {\n return contract.methods.setSubnodeRecord(namehash.hash(name), label, formatters.inputAddressFormatter(owner), formatters.inputAddressFormatter(resolver), ttl).send(txConfig);\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Sets or clears an approval by the given operator.\n *\n * @method setApprovalForAll\n *\n * @param {string} operator\n * @param {boolean} approved\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nRegistry.prototype.setApprovalForAll = function (operator, approved, txConfig, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.setApprovalForAll(formatters.inputAddressFormatter(operator), approved).send(txConfig);\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Returns true if the operator is approved\n *\n * @method isApprovedForAll\n *\n * @param {string} owner\n * @param {string} operator\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nRegistry.prototype.isApprovedForAll = function (owner, operator, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.isApprovedForAll(formatters.inputAddressFormatter(owner), formatters.inputAddressFormatter(operator)).call();\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Returns true if the record exists\n *\n * @method recordExists\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nRegistry.prototype.recordExists = function (name, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.recordExists(namehash.hash(name)).call();\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Returns the resolver contract associated with a name.\n *\n * @deprecated Please use the \"getResolver\" method instead of \"resolver\"\n *\n * @method resolver\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nRegistry.prototype.resolver = function (name, callback) {\n console.warn('Deprecated: Please use the \"getResolver\" method instead of \"resolver\".');\n return this.getResolver(name, callback);\n};\n/**\n * Returns the resolver contract associated with a name.\n *\n * @method getResolver\n *\n * @param {string} name\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {Promise}\n */\nRegistry.prototype.getResolver = function (name, callback) {\n var self = this;\n return this.contract.then(function (contract) {\n return contract.methods.resolver(namehash.hash(name)).call();\n }).then(function (address) {\n var contract = new Contract(RESOLVER_ABI, address);\n contract.setProvider(self.ens.eth.currentProvider);\n if (typeof callback === 'function') {\n // It's required to pass the contract to the first argument to be backward compatible and to have the required consistency\n callback(contract, contract);\n return;\n }\n return contract;\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n throw error;\n });\n};\n/**\n * Returns the address of the owner of an ENS name.\n *\n * @method setResolver\n *\n * @param {string} name\n * @param {string} address\n * @param {TransactionConfig} txConfig\n * @param {function} callback\n *\n * @callback callback callback(error, result)\n * @returns {PromiEvent}\n */\nRegistry.prototype.setResolver = function (name, address, txConfig, callback) {\n var promiEvent = new PromiEvent(true);\n this.contract.then(function (contract) {\n return contract.methods.setResolver(namehash.hash(name), formatters.inputAddressFormatter(address)).send(txConfig);\n }).then(function (receipt) {\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the first argument to be backward compatible and to have the required consistency\n callback(receipt, receipt);\n return;\n }\n promiEvent.resolve(receipt);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\nmodule.exports = Registry;\n","/*\n This file is part of web3.js.\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n *\n * @author Samuel Furter \n * @date 2018\n */\n\"use strict\";\nvar ENS = require('./ENS');\nmodule.exports = ENS;\n","/*\n This file is part of web3.js.\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file ResolverMethodHandler.js\n *\n * @author Samuel Furter \n * @date 2018\n */\n\"use strict\";\nvar PromiEvent = require('web3-core-promievent');\nvar namehash = require('eth-ens-namehash');\nvar errors = require('web3-core-helpers').errors;\nvar interfaceIds = require('../config').interfaceIds;\n/**\n * @param {Registry} registry\n * @constructor\n */\nfunction ResolverMethodHandler(registry) {\n this.registry = registry;\n}\n/**\n * Executes an resolver method and returns an eventifiedPromise\n *\n * @param {string} ensName\n * @param {string} methodName\n * @param {array} methodArguments\n * @param {function} callback\n * @returns {Object}\n */\nResolverMethodHandler.prototype.method = function (ensName, methodName, methodArguments, outputFormatter, callback) {\n return {\n call: this.call.bind({\n ensName: ensName,\n methodName: methodName,\n methodArguments: methodArguments,\n callback: callback,\n parent: this,\n outputFormatter: outputFormatter\n }),\n send: this.send.bind({\n ensName: ensName,\n methodName: methodName,\n methodArguments: methodArguments,\n callback: callback,\n parent: this\n })\n };\n};\n/**\n * Executes call\n *\n * @returns {eventifiedPromise}\n */\nResolverMethodHandler.prototype.call = function (callback) {\n var self = this;\n var promiEvent = new PromiEvent();\n var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments);\n var outputFormatter = this.outputFormatter || null;\n this.parent.registry.getResolver(this.ensName).then(async function (resolver) {\n await self.parent.checkInterfaceSupport(resolver, self.methodName);\n self.parent.handleCall(promiEvent, resolver.methods[self.methodName], preparedArguments, outputFormatter, callback);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Executes send\n *\n * @param {Object} sendOptions\n * @param {function} callback\n * @returns {eventifiedPromise}\n */\nResolverMethodHandler.prototype.send = function (sendOptions, callback) {\n var self = this;\n var promiEvent = new PromiEvent();\n var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments);\n this.parent.registry.getResolver(this.ensName).then(async function (resolver) {\n await self.parent.checkInterfaceSupport(resolver, self.methodName);\n self.parent.handleSend(promiEvent, resolver.methods[self.methodName], preparedArguments, sendOptions, callback);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent.eventEmitter;\n};\n/**\n * Handles a call method\n *\n * @param {eventifiedPromise} promiEvent\n * @param {function} method\n * @param {array} preparedArguments\n * @param {function} callback\n * @returns {eventifiedPromise}\n */\nResolverMethodHandler.prototype.handleCall = function (promiEvent, method, preparedArguments, outputFormatter, callback) {\n method.apply(this, preparedArguments).call()\n .then(function (result) {\n if (outputFormatter) {\n result = outputFormatter(result);\n }\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the second argument to be backwards compatible and to have the required consistency\n callback(result, result);\n return;\n }\n promiEvent.resolve(result);\n }).catch(function (error) {\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent;\n};\n/**\n * Handles a send method\n *\n * @param {eventifiedPromise} promiEvent\n * @param {function} method\n * @param {array} preparedArguments\n * @param {Object} sendOptions\n * @param {function} callback\n * @returns {eventifiedPromise}\n */\nResolverMethodHandler.prototype.handleSend = function (promiEvent, method, preparedArguments, sendOptions, callback) {\n method.apply(this, preparedArguments).send(sendOptions)\n .on('sending', function () {\n promiEvent.eventEmitter.emit('sending');\n })\n .on('sent', function () {\n promiEvent.eventEmitter.emit('sent');\n })\n .on('transactionHash', function (hash) {\n promiEvent.eventEmitter.emit('transactionHash', hash);\n })\n .on('confirmation', function (confirmationNumber, receipt) {\n promiEvent.eventEmitter.emit('confirmation', confirmationNumber, receipt);\n })\n .on('receipt', function (receipt) {\n promiEvent.eventEmitter.emit('receipt', receipt);\n promiEvent.resolve(receipt);\n if (typeof callback === 'function') {\n // It's required to pass the receipt to the second argument to be backwards compatible and to have the required consistency\n callback(receipt, receipt);\n }\n })\n .on('error', function (error) {\n promiEvent.eventEmitter.emit('error', error);\n if (typeof callback === 'function') {\n callback(error, null);\n return;\n }\n promiEvent.reject(error);\n });\n return promiEvent;\n};\n/**\n * Adds the ENS node to the arguments\n *\n * @param {string} name\n * @param {array} methodArguments\n *\n * @returns {array}\n */\nResolverMethodHandler.prototype.prepareArguments = function (name, methodArguments) {\n var node = namehash.hash(name);\n if (methodArguments.length > 0) {\n methodArguments.unshift(node);\n return methodArguments;\n }\n return [node];\n};\n/**\n *\n *\n * @param {Contract} resolver\n * @param {string} methodName\n *\n * @returns {Promise}\n */\nResolverMethodHandler.prototype.checkInterfaceSupport = async function (resolver, methodName) {\n // Skip validation for undocumented interface ids (ex: multihash)\n if (!interfaceIds[methodName])\n return;\n var supported = false;\n try {\n supported = await resolver\n .methods\n .supportsInterface(interfaceIds[methodName])\n .call();\n }\n catch (err) {\n console.warn('Could not verify interface of resolver contract at \"' + resolver.options.address + '\". ');\n }\n if (!supported) {\n throw errors.ResolverMethodMissingError(resolver.options.address, methodName);\n }\n};\nmodule.exports = ResolverMethodHandler;\n","/*\nAdapted from ensdomains/ui\nhttps://github.com/ensdomains/ui/blob/3e62e440b53466eeec9dd1c63d73924eefbd88c1/src/utils/contents.js#L1-L85\n\nBSD 2-Clause License\n\nCopyright (c) 2019, Ethereum Name Service\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nvar contentHash = require('content-hash');\nfunction decode(encoded) {\n var decoded = null;\n var protocolType = null;\n var error = null;\n if (encoded && encoded.error) {\n return {\n protocolType: null,\n decoded: encoded.error\n };\n }\n if (encoded) {\n try {\n decoded = contentHash.decode(encoded);\n var codec = contentHash.getCodec(encoded);\n if (codec === 'ipfs-ns') {\n protocolType = 'ipfs';\n }\n else if (codec === 'swarm-ns') {\n protocolType = 'bzz';\n }\n else if (codec === 'onion') {\n protocolType = 'onion';\n }\n else if (codec === 'onion3') {\n protocolType = 'onion3';\n }\n else {\n decoded = encoded;\n }\n }\n catch (e) {\n error = e.message;\n }\n }\n return {\n protocolType: protocolType,\n decoded: decoded,\n error: error\n };\n}\nfunction encode(text) {\n var content, contentType;\n var encoded = false;\n if (!!text) {\n var matched = text.match(/^(ipfs|bzz|onion|onion3):\\/\\/(.*)/) || text.match(/\\/(ipfs)\\/(.*)/);\n if (matched) {\n contentType = matched[1];\n content = matched[2];\n }\n try {\n if (contentType === 'ipfs') {\n if (content.length >= 4) {\n encoded = '0x' + contentHash.fromIpfs(content);\n }\n }\n else if (contentType === 'bzz') {\n if (content.length >= 4) {\n encoded = '0x' + contentHash.fromSwarm(content);\n }\n }\n else if (contentType === 'onion') {\n if (content.length === 16) {\n encoded = '0x' + contentHash.encode('onion', content);\n }\n }\n else if (contentType === 'onion3') {\n if (content.length === 56) {\n encoded = '0x' + contentHash.encode('onion3', content);\n }\n }\n else {\n throw new Error('Could not encode content hash: unsupported content type');\n }\n }\n catch (err) {\n throw err;\n }\n }\n return encoded;\n}\nmodule.exports = {\n decode: decode,\n encode: encode\n};\n","\"use strict\";\nvar REGISTRY = [\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"resolver\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"label\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setSubnodeOwner\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"ttl\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"setTTL\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"ttl\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint64\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"resolver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setResolver\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setOwner\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"name\": \"label\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NewOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"resolver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NewResolver\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"ttl\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"NewTTL\",\n \"type\": \"event\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"resolver\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"ttl\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"setRecord\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"approved\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"setApprovalForAll\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"approved\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"ApprovalForAll\",\n \"type\": \"event\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isApprovedForAll\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"recordExists\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"label\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"resolver\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"ttl\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"setSubnodeRecord\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\nmodule.exports = REGISTRY;\n","\"use strict\";\nvar RESOLVER = [\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"interfaceID\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"contentTypes\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ABI\",\n \"outputs\": [\n {\n \"name\": \"contentType\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"hash\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"setMultihash\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"multihash\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"x\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"y\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"setPubkey\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"content\",\n \"outputs\": [\n {\n \"name\": \"ret\",\n \"type\": \"bytes32\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"addr\",\n \"outputs\": [\n {\n \"name\": \"ret\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"contentType\",\n \"type\": \"uint256\"\n },\n {\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"setABI\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"ret\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setName\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"hash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"setContent\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"pubkey\",\n \"outputs\": [\n {\n \"name\": \"x\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"y\",\n \"type\": \"bytes32\"\n }\n ],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"addr\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setAddr\",\n \"outputs\": [],\n \"payable\": false,\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"name\": \"ensAddr\",\n \"type\": \"address\"\n }\n ],\n \"payable\": false,\n \"type\": \"constructor\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddrChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"hash\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"ContentChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"name\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"NameChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"name\": \"contentType\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ABIChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"x\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"y\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"PubkeyChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": false,\n \"name\": \"hash\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"ContenthashChanged\",\n \"type\": \"event\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"contenthash\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"node\",\n \"type\": \"bytes32\"\n },\n {\n \"name\": \"hash\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"setContenthash\",\n \"outputs\": [],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n];\nmodule.exports = RESOLVER;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file iban.js\n *\n * Details: https://github.com/ethereum/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol\n *\n * @author Marek Kotewicz \n * @date 2015\n */\n\"use strict\";\nconst utils = require('web3-utils');\nconst BigNumber = require('bn.js');\nconst leftPad = function (string, bytes) {\n let result = string;\n while (result.length < bytes * 2) {\n result = '0' + result;\n }\n return result;\n};\n/**\n * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to\n * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.\n *\n * @method iso13616Prepare\n * @param {String} iban the IBAN\n * @returns {String} the prepared IBAN\n */\nconst iso13616Prepare = function (iban) {\n const A = 'A'.charCodeAt(0);\n const Z = 'Z'.charCodeAt(0);\n iban = iban.toUpperCase();\n iban = iban.substr(4) + iban.substr(0, 4);\n return iban.split('').map(function (n) {\n const code = n.charCodeAt(0);\n if (code >= A && code <= Z) {\n // A = 10, B = 11, ... Z = 35\n return code - A + 10;\n }\n else {\n return n;\n }\n }).join('');\n};\n/**\n * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.\n *\n * @method mod9710\n * @param {String} iban\n * @returns {Number}\n */\nconst mod9710 = function (iban) {\n let remainder = iban;\n let block;\n while (remainder.length > 2) {\n block = remainder.slice(0, 9);\n remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);\n }\n return parseInt(remainder, 10) % 97;\n};\n/**\n * This prototype should be used to create iban object from iban correct string\n *\n * @param {String} iban\n */\nclass Iban {\n constructor(iban) {\n this._iban = iban;\n }\n /**\n * This method should be used to create an ethereum address from a direct iban address\n *\n * @method toAddress\n * @param {String} iban address\n * @return {String} the ethereum address\n */\n static toAddress(ib) {\n ib = new Iban(ib);\n if (!ib.isDirect()) {\n throw new Error('IBAN is indirect and can\\'t be converted');\n }\n return ib.toAddress();\n }\n /**\n * This method should be used to create iban address from an ethereum address\n *\n * @method toIban\n * @param {String} address\n * @return {String} the IBAN address\n */\n static toIban(address) {\n return Iban.fromAddress(address).toString();\n }\n /**\n * This method should be used to create iban object from an ethereum address\n *\n * @method fromAddress\n * @param {String} address\n * @return {Iban} the IBAN object\n */\n static fromAddress(address) {\n if (!utils.isAddress(address)) {\n throw new Error('Provided address is not a valid address: ' + address);\n }\n address = address.replace('0x', '').replace('0X', '');\n const asBn = new BigNumber(address, 16);\n const base36 = asBn.toString(36);\n const padded = leftPad(base36, 15);\n return Iban.fromBban(padded.toUpperCase());\n }\n /**\n * Convert the passed BBAN to an IBAN for this country specification.\n * Please note that \"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account\".\n * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits\n *\n * @method fromBban\n * @param {String} bban the BBAN to convert to IBAN\n * @returns {Iban} the IBAN object\n */\n static fromBban(bban) {\n const countryCode = 'XE';\n const remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));\n const checkDigit = ('0' + (98 - remainder)).slice(-2);\n return new Iban(countryCode + checkDigit + bban);\n }\n /**\n * Should be used to create IBAN object for given institution and identifier\n *\n * @method createIndirect\n * @param {Object} options, required options are \"institution\" and \"identifier\"\n * @return {Iban} the IBAN object\n */\n static createIndirect(options) {\n return Iban.fromBban('ETH' + options.institution + options.identifier);\n }\n /**\n * This method should be used to check if given string is valid iban object\n *\n * @method isValid\n * @param {String} iban string\n * @return {Boolean} true if it is valid IBAN\n */\n static isValid(iban) {\n const i = new Iban(iban);\n return i.isValid();\n }\n ;\n /**\n * Should be called to check if iban is correct\n *\n * @method isValid\n * @returns {Boolean} true if it is, otherwise false\n */\n isValid() {\n return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&\n mod9710(iso13616Prepare(this._iban)) === 1;\n }\n ;\n /**\n * Should be called to check if iban number is direct\n *\n * @method isDirect\n * @returns {Boolean} true if it is, otherwise false\n */\n isDirect() {\n return this._iban.length === 34 || this._iban.length === 35;\n }\n ;\n /**\n * Should be called to check if iban number if indirect\n *\n * @method isIndirect\n * @returns {Boolean} true if it is, otherwise false\n */\n isIndirect() {\n return this._iban.length === 20;\n }\n ;\n /**\n * Should be called to get iban checksum\n * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)\n *\n * @method checksum\n * @returns {String} checksum\n */\n checksum() {\n return this._iban.substr(2, 2);\n }\n ;\n /**\n * Should be called to get institution identifier\n * eg. XREG\n *\n * @method institution\n * @returns {String} institution identifier\n */\n institution() {\n return this.isIndirect() ? this._iban.substr(7, 4) : '';\n }\n ;\n /**\n * Should be called to get client identifier within institution\n * eg. GAVOFYORK\n *\n * @method client\n * @returns {String} client identifier\n */\n client() {\n return this.isIndirect() ? this._iban.substr(11) : '';\n }\n ;\n /**\n * Should be called to get client direct address\n *\n * @method toAddress\n * @returns {String} ethereum address\n */\n toAddress() {\n if (this.isDirect()) {\n const base36 = this._iban.substr(4);\n const asBn = new BigNumber(base36, 36);\n return utils.toChecksumAddress(asBn.toString(16, 20));\n }\n return '';\n }\n ;\n toString() {\n return this._iban;\n }\n ;\n}\nmodule.exports = Iban;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar core = require('web3-core');\nvar Method = require('web3-core-method');\nvar utils = require('web3-utils');\nvar Net = require('web3-net');\nvar formatters = require('web3-core-helpers').formatters;\nvar Personal = function Personal() {\n var _this = this;\n // sets _requestmanager\n core.packageInit(this, arguments);\n this.net = new Net(this);\n var defaultAccount = null;\n var defaultBlock = 'latest';\n Object.defineProperty(this, 'defaultAccount', {\n get: function () {\n return defaultAccount;\n },\n set: function (val) {\n if (val) {\n defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val));\n }\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultAccount = defaultAccount;\n });\n return val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultBlock', {\n get: function () {\n return defaultBlock;\n },\n set: function (val) {\n defaultBlock = val;\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultBlock = defaultBlock;\n });\n return val;\n },\n enumerable: true\n });\n var methods = [\n new Method({\n name: 'getAccounts',\n call: 'personal_listAccounts',\n params: 0,\n outputFormatter: utils.toChecksumAddress\n }),\n new Method({\n name: 'newAccount',\n call: 'personal_newAccount',\n params: 1,\n inputFormatter: [null],\n outputFormatter: utils.toChecksumAddress\n }),\n new Method({\n name: 'unlockAccount',\n call: 'personal_unlockAccount',\n params: 3,\n inputFormatter: [formatters.inputAddressFormatter, null, null]\n }),\n new Method({\n name: 'lockAccount',\n call: 'personal_lockAccount',\n params: 1,\n inputFormatter: [formatters.inputAddressFormatter]\n }),\n new Method({\n name: 'importRawKey',\n call: 'personal_importRawKey',\n params: 2\n }),\n new Method({\n name: 'sendTransaction',\n call: 'personal_sendTransaction',\n params: 2,\n inputFormatter: [formatters.inputTransactionFormatter, null]\n }),\n new Method({\n name: 'signTransaction',\n call: 'personal_signTransaction',\n params: 2,\n inputFormatter: [formatters.inputTransactionFormatter, null]\n }),\n new Method({\n name: 'sign',\n call: 'personal_sign',\n params: 3,\n inputFormatter: [formatters.inputSignFormatter, formatters.inputAddressFormatter, null]\n }),\n new Method({\n name: 'ecRecover',\n call: 'personal_ecRecover',\n params: 2,\n inputFormatter: [formatters.inputSignFormatter, null]\n })\n ];\n methods.forEach(function (method) {\n method.attachToObject(_this);\n method.setRequestManager(_this._requestManager);\n method.defaultBlock = _this.defaultBlock;\n method.defaultAccount = _this.defaultAccount;\n });\n};\ncore.addProviders(Personal);\nmodule.exports = Personal;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file getNetworkType.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar getNetworkType = function (callback) {\n var _this = this, id;\n return this.net.getId()\n .then(function (givenId) {\n id = givenId;\n return _this.getBlock(0);\n })\n .then(function (genesis) {\n var returnValue = 'private';\n if (genesis.hash === '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3' &&\n id === 1) {\n returnValue = 'main';\n }\n if (genesis.hash === '0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d' &&\n id === 3) {\n returnValue = 'ropsten';\n }\n if (genesis.hash === '0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177' &&\n id === 4) {\n returnValue = 'rinkeby';\n }\n if (genesis.hash === '0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a' &&\n id === 5) {\n returnValue = 'goerli';\n }\n if (genesis.hash === '0xa3c565fc15c7478862d50ccd6561e3c06b24cc509bf388941c25ea985ce32cb9' &&\n id === 42) {\n returnValue = 'kovan';\n }\n if (typeof callback === 'function') {\n callback(null, returnValue);\n }\n return returnValue;\n })\n .catch(function (err) {\n if (typeof callback === 'function') {\n callback(err);\n }\n else {\n throw err;\n }\n });\n};\nmodule.exports = getNetworkType;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar core = require('web3-core');\nvar helpers = require('web3-core-helpers');\nvar Subscriptions = require('web3-core-subscriptions').subscriptions;\nvar Method = require('web3-core-method');\nvar utils = require('web3-utils');\nvar Net = require('web3-net');\nvar ENS = require('web3-eth-ens');\nvar Personal = require('web3-eth-personal');\nvar BaseContract = require('web3-eth-contract');\nvar Iban = require('web3-eth-iban');\nvar Accounts = require('web3-eth-accounts');\nvar abi = require('web3-eth-abi');\nvar getNetworkType = require('./getNetworkType.js');\nvar formatter = helpers.formatters;\nvar blockCall = function (args) {\n return (typeof args[0] === 'string' && args[0].indexOf('0x') === 0) ? \"eth_getBlockByHash\" : \"eth_getBlockByNumber\";\n};\nvar transactionFromBlockCall = function (args) {\n return (typeof args[0] === 'string' && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';\n};\nvar uncleCall = function (args) {\n return (typeof args[0] === 'string' && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';\n};\nvar getBlockTransactionCountCall = function (args) {\n return (typeof args[0] === 'string' && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';\n};\nvar uncleCountCall = function (args) {\n return (typeof args[0] === 'string' && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';\n};\nvar Eth = function Eth() {\n var _this = this;\n // sets _requestmanager\n core.packageInit(this, arguments);\n // overwrite package setRequestManager\n var setRequestManager = this.setRequestManager;\n this.setRequestManager = function (manager) {\n setRequestManager(manager);\n _this.net.setRequestManager(manager);\n _this.personal.setRequestManager(manager);\n _this.accounts.setRequestManager(manager);\n _this.Contract._requestManager = _this._requestManager;\n _this.Contract.currentProvider = _this._provider;\n return true;\n };\n // overwrite setProvider\n var setProvider = this.setProvider;\n this.setProvider = function () {\n setProvider.apply(_this, arguments);\n _this.setRequestManager(_this._requestManager);\n // Set detectedAddress/lastSyncCheck back to null because the provider could be connected to a different chain now\n _this.ens._detectedAddress = null;\n _this.ens._lastSyncCheck = null;\n };\n var handleRevert = false;\n var defaultAccount = null;\n var defaultBlock = 'latest';\n var transactionBlockTimeout = 50;\n var transactionConfirmationBlocks = 24;\n var transactionPollingTimeout = 750;\n var transactionPollingInterval = 1000;\n var blockHeaderTimeout = 10; // 10 seconds\n var maxListenersWarningThreshold = 100;\n var defaultChain, defaultHardfork, defaultCommon;\n Object.defineProperty(this, 'handleRevert', {\n get: function () {\n return handleRevert;\n },\n set: function (val) {\n handleRevert = val;\n // also set on the Contract object\n _this.Contract.handleRevert = handleRevert;\n // update handleRevert\n methods.forEach(function (method) {\n method.handleRevert = handleRevert;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultCommon', {\n get: function () {\n return defaultCommon;\n },\n set: function (val) {\n defaultCommon = val;\n // also set on the Contract object\n _this.Contract.defaultCommon = defaultCommon;\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultCommon = defaultCommon;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultHardfork', {\n get: function () {\n return defaultHardfork;\n },\n set: function (val) {\n defaultHardfork = val;\n // also set on the Contract object\n _this.Contract.defaultHardfork = defaultHardfork;\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultHardfork = defaultHardfork;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultChain', {\n get: function () {\n return defaultChain;\n },\n set: function (val) {\n defaultChain = val;\n // also set on the Contract object\n _this.Contract.defaultChain = defaultChain;\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultChain = defaultChain;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionPollingTimeout', {\n get: function () {\n return transactionPollingTimeout;\n },\n set: function (val) {\n transactionPollingTimeout = val;\n // also set on the Contract object\n _this.Contract.transactionPollingTimeout = transactionPollingTimeout;\n // update defaultBlock\n methods.forEach(function (method) {\n method.transactionPollingTimeout = transactionPollingTimeout;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionPollingInterval', {\n get: function () {\n return transactionPollingInterval;\n },\n set: function (val) {\n transactionPollingInterval = val;\n // also set on the Contract object\n _this.Contract.transactionPollingInterval = transactionPollingInterval;\n // update defaultBlock\n methods.forEach(function (method) {\n method.transactionPollingInterval = transactionPollingInterval;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionConfirmationBlocks', {\n get: function () {\n return transactionConfirmationBlocks;\n },\n set: function (val) {\n transactionConfirmationBlocks = val;\n // also set on the Contract object\n _this.Contract.transactionConfirmationBlocks = transactionConfirmationBlocks;\n // update defaultBlock\n methods.forEach(function (method) {\n method.transactionConfirmationBlocks = transactionConfirmationBlocks;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'transactionBlockTimeout', {\n get: function () {\n return transactionBlockTimeout;\n },\n set: function (val) {\n transactionBlockTimeout = val;\n // also set on the Contract object\n _this.Contract.transactionBlockTimeout = transactionBlockTimeout;\n // update defaultBlock\n methods.forEach(function (method) {\n method.transactionBlockTimeout = transactionBlockTimeout;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'blockHeaderTimeout', {\n get: function () {\n return blockHeaderTimeout;\n },\n set: function (val) {\n blockHeaderTimeout = val;\n // also set on the Contract object\n _this.Contract.blockHeaderTimeout = blockHeaderTimeout;\n // update defaultBlock\n methods.forEach(function (method) {\n method.blockHeaderTimeout = blockHeaderTimeout;\n });\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultAccount', {\n get: function () {\n return defaultAccount;\n },\n set: function (val) {\n if (val) {\n defaultAccount = utils.toChecksumAddress(formatter.inputAddressFormatter(val));\n }\n // also set on the Contract object\n _this.Contract.defaultAccount = defaultAccount;\n _this.personal.defaultAccount = defaultAccount;\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultAccount = defaultAccount;\n });\n return val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'defaultBlock', {\n get: function () {\n return defaultBlock;\n },\n set: function (val) {\n defaultBlock = val;\n // also set on the Contract object\n _this.Contract.defaultBlock = defaultBlock;\n _this.personal.defaultBlock = defaultBlock;\n // update defaultBlock\n methods.forEach(function (method) {\n method.defaultBlock = defaultBlock;\n });\n return val;\n },\n enumerable: true\n });\n Object.defineProperty(this, 'maxListenersWarningThreshold', {\n get: function () {\n return maxListenersWarningThreshold;\n },\n set: function (val) {\n if (_this.currentProvider && _this.currentProvider.setMaxListeners) {\n maxListenersWarningThreshold = val;\n _this.currentProvider.setMaxListeners(val);\n }\n },\n enumerable: true\n });\n this.clearSubscriptions = _this._requestManager.clearSubscriptions.bind(_this._requestManager);\n this.removeSubscriptionById = _this._requestManager.removeSubscription.bind(_this._requestManager);\n // add net\n this.net = new Net(this);\n // add chain detection\n this.net.getNetworkType = getNetworkType.bind(this);\n // add accounts\n this.accounts = new Accounts(this);\n // add personal\n this.personal = new Personal(this);\n this.personal.defaultAccount = this.defaultAccount;\n // set warnings threshold\n this.maxListenersWarningThreshold = maxListenersWarningThreshold;\n // create a proxy Contract type for this instance, as a Contract's provider\n // is stored as a class member rather than an instance variable. If we do\n // not create this proxy type, changing the provider in one instance of\n // web3-eth would subsequently change the provider for _all_ contract\n // instances!\n var self = this;\n var Contract = function Contract() {\n BaseContract.apply(this, arguments);\n // when Eth.setProvider is called, call packageInit\n // on all contract instances instantiated via this Eth\n // instances. This will update the currentProvider for\n // the contract instances\n var _this = this;\n var setProvider = self.setProvider;\n self.setProvider = function () {\n setProvider.apply(self, arguments);\n core.packageInit(_this, [self]);\n };\n };\n Contract.setProvider = function () {\n BaseContract.setProvider.apply(this, arguments);\n };\n // make our proxy Contract inherit from web3-eth-contract so that it has all\n // the right functionality and so that instanceof and friends work properly\n Contract.prototype = Object.create(BaseContract.prototype);\n Contract.prototype.constructor = Contract;\n // add contract\n this.Contract = Contract;\n this.Contract.defaultAccount = this.defaultAccount;\n this.Contract.defaultBlock = this.defaultBlock;\n this.Contract.transactionBlockTimeout = this.transactionBlockTimeout;\n this.Contract.transactionConfirmationBlocks = this.transactionConfirmationBlocks;\n this.Contract.transactionPollingTimeout = this.transactionPollingTimeout;\n this.Contract.transactionPollingInterval = this.transactionPollingInterval;\n this.Contract.blockHeaderTimeout = this.blockHeaderTimeout;\n this.Contract.handleRevert = this.handleRevert;\n this.Contract._requestManager = this._requestManager;\n this.Contract._ethAccounts = this.accounts;\n this.Contract.currentProvider = this._requestManager.provider;\n // add IBAN\n this.Iban = Iban;\n // add ABI\n this.abi = abi;\n // add ENS\n this.ens = new ENS(this);\n var methods = [\n new Method({\n name: 'getNodeInfo',\n call: 'web3_clientVersion'\n }),\n new Method({\n name: 'getProtocolVersion',\n call: 'eth_protocolVersion',\n params: 0\n }),\n new Method({\n name: 'getCoinbase',\n call: 'eth_coinbase',\n params: 0\n }),\n new Method({\n name: 'isMining',\n call: 'eth_mining',\n params: 0\n }),\n new Method({\n name: 'getHashrate',\n call: 'eth_hashrate',\n params: 0,\n outputFormatter: utils.hexToNumber\n }),\n new Method({\n name: 'isSyncing',\n call: 'eth_syncing',\n params: 0,\n outputFormatter: formatter.outputSyncingFormatter\n }),\n new Method({\n name: 'getGasPrice',\n call: 'eth_gasPrice',\n params: 0,\n outputFormatter: formatter.outputBigNumberFormatter\n }),\n new Method({\n name: 'getFeeHistory',\n call: 'eth_feeHistory',\n params: 3,\n inputFormatter: [utils.numberToHex, formatter.inputBlockNumberFormatter, null]\n }),\n new Method({\n name: 'getAccounts',\n call: 'eth_accounts',\n params: 0,\n outputFormatter: utils.toChecksumAddress\n }),\n new Method({\n name: 'getBlockNumber',\n call: 'eth_blockNumber',\n params: 0,\n outputFormatter: utils.hexToNumber\n }),\n new Method({\n name: 'getBalance',\n call: 'eth_getBalance',\n params: 2,\n inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter],\n outputFormatter: formatter.outputBigNumberFormatter\n }),\n new Method({\n name: 'getStorageAt',\n call: 'eth_getStorageAt',\n params: 3,\n inputFormatter: [formatter.inputAddressFormatter, utils.numberToHex, formatter.inputDefaultBlockNumberFormatter]\n }),\n new Method({\n name: 'getCode',\n call: 'eth_getCode',\n params: 2,\n inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter]\n }),\n new Method({\n name: 'getBlock',\n call: blockCall,\n params: 2,\n inputFormatter: [formatter.inputBlockNumberFormatter, function (val) { return !!val; }],\n outputFormatter: formatter.outputBlockFormatter\n }),\n new Method({\n name: 'getUncle',\n call: uncleCall,\n params: 2,\n inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex],\n outputFormatter: formatter.outputBlockFormatter,\n }),\n new Method({\n name: 'getBlockTransactionCount',\n call: getBlockTransactionCountCall,\n params: 1,\n inputFormatter: [formatter.inputBlockNumberFormatter],\n outputFormatter: utils.hexToNumber\n }),\n new Method({\n name: 'getBlockUncleCount',\n call: uncleCountCall,\n params: 1,\n inputFormatter: [formatter.inputBlockNumberFormatter],\n outputFormatter: utils.hexToNumber\n }),\n new Method({\n name: 'getTransaction',\n call: 'eth_getTransactionByHash',\n params: 1,\n inputFormatter: [null],\n outputFormatter: formatter.outputTransactionFormatter\n }),\n new Method({\n name: 'getTransactionFromBlock',\n call: transactionFromBlockCall,\n params: 2,\n inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex],\n outputFormatter: formatter.outputTransactionFormatter\n }),\n new Method({\n name: 'getTransactionReceipt',\n call: 'eth_getTransactionReceipt',\n params: 1,\n inputFormatter: [null],\n outputFormatter: formatter.outputTransactionReceiptFormatter\n }),\n new Method({\n name: 'getTransactionCount',\n call: 'eth_getTransactionCount',\n params: 2,\n inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter],\n outputFormatter: utils.hexToNumber\n }),\n new Method({\n name: 'sendSignedTransaction',\n call: 'eth_sendRawTransaction',\n params: 1,\n inputFormatter: [null],\n abiCoder: abi\n }),\n new Method({\n name: 'signTransaction',\n call: 'eth_signTransaction',\n params: 1,\n inputFormatter: [formatter.inputTransactionFormatter]\n }),\n new Method({\n name: 'sendTransaction',\n call: 'eth_sendTransaction',\n params: 1,\n inputFormatter: [formatter.inputTransactionFormatter],\n abiCoder: abi\n }),\n new Method({\n name: 'sign',\n call: 'eth_sign',\n params: 2,\n inputFormatter: [formatter.inputSignFormatter, formatter.inputAddressFormatter],\n transformPayload: function (payload) {\n payload.params.reverse();\n return payload;\n }\n }),\n new Method({\n name: 'call',\n call: 'eth_call',\n params: 2,\n inputFormatter: [formatter.inputCallFormatter, formatter.inputDefaultBlockNumberFormatter],\n abiCoder: abi\n }),\n new Method({\n name: 'estimateGas',\n call: 'eth_estimateGas',\n params: 1,\n inputFormatter: [formatter.inputCallFormatter],\n outputFormatter: utils.hexToNumber\n }),\n new Method({\n name: 'submitWork',\n call: 'eth_submitWork',\n params: 3\n }),\n new Method({\n name: 'getWork',\n call: 'eth_getWork',\n params: 0\n }),\n new Method({\n name: 'getPastLogs',\n call: 'eth_getLogs',\n params: 1,\n inputFormatter: [formatter.inputLogFormatter],\n outputFormatter: formatter.outputLogFormatter\n }),\n new Method({\n name: 'getChainId',\n call: 'eth_chainId',\n params: 0,\n outputFormatter: utils.hexToNumber\n }),\n new Method({\n name: 'requestAccounts',\n call: 'eth_requestAccounts',\n params: 0,\n outputFormatter: utils.toChecksumAddress\n }),\n new Method({\n name: 'getProof',\n call: 'eth_getProof',\n params: 3,\n inputFormatter: [formatter.inputAddressFormatter, formatter.inputStorageKeysFormatter, formatter.inputDefaultBlockNumberFormatter],\n outputFormatter: formatter.outputProofFormatter\n }),\n new Method({\n name: 'getPendingTransactions',\n call: 'eth_pendingTransactions',\n params: 0,\n outputFormatter: formatter.outputTransactionFormatter\n }),\n new Method({\n name: 'createAccessList',\n call: 'eth_createAccessList',\n params: 2,\n inputFormatter: [formatter.inputTransactionFormatter, formatter.inputDefaultBlockNumberFormatter],\n }),\n // subscriptions\n new Subscriptions({\n name: 'subscribe',\n type: 'eth',\n subscriptions: {\n 'newBlockHeaders': {\n // TODO rename on RPC side?\n subscriptionName: 'newHeads',\n params: 0,\n outputFormatter: formatter.outputBlockFormatter\n },\n 'pendingTransactions': {\n subscriptionName: 'newPendingTransactions',\n params: 0\n },\n 'logs': {\n params: 1,\n inputFormatter: [formatter.inputLogFormatter],\n outputFormatter: formatter.outputLogFormatter,\n // DUBLICATE, also in web3-eth-contract\n subscriptionHandler: function (output) {\n if (output.removed) {\n this.emit('changed', output);\n }\n else {\n this.emit('data', output);\n }\n if (typeof this.callback === 'function') {\n this.callback(null, output, this);\n }\n }\n },\n 'syncing': {\n params: 0,\n outputFormatter: formatter.outputSyncingFormatter,\n subscriptionHandler: function (output) {\n var _this = this;\n // fire TRUE at start\n if (this._isSyncing !== true) {\n this._isSyncing = true;\n this.emit('changed', _this._isSyncing);\n if (typeof this.callback === 'function') {\n this.callback(null, _this._isSyncing, this);\n }\n setTimeout(function () {\n _this.emit('data', output);\n if (typeof _this.callback === 'function') {\n _this.callback(null, output, _this);\n }\n }, 0);\n // fire sync status\n }\n else {\n this.emit('data', output);\n if (typeof _this.callback === 'function') {\n this.callback(null, output, this);\n }\n // wait for some time before fireing the FALSE\n clearTimeout(this._isSyncingTimeout);\n this._isSyncingTimeout = setTimeout(function () {\n if (output.currentBlock > output.highestBlock - 200) {\n _this._isSyncing = false;\n _this.emit('changed', _this._isSyncing);\n if (typeof _this.callback === 'function') {\n _this.callback(null, _this._isSyncing, _this);\n }\n }\n }, 500);\n }\n }\n }\n }\n })\n ];\n methods.forEach(function (method) {\n method.attachToObject(_this);\n method.setRequestManager(_this._requestManager, _this.accounts); // second param is the eth.accounts module (necessary for signing transactions locally)\n method.defaultBlock = _this.defaultBlock;\n method.defaultAccount = _this.defaultAccount;\n method.transactionBlockTimeout = _this.transactionBlockTimeout;\n method.transactionConfirmationBlocks = _this.transactionConfirmationBlocks;\n method.transactionPollingTimeout = _this.transactionPollingTimeout;\n method.transactionPollingInterval = _this.transactionPollingInterval;\n method.handleRevert = _this.handleRevert;\n });\n};\n// Adds the static givenProvider and providers property to the Eth module\ncore.addProviders(Eth);\nmodule.exports = Eth;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar core = require('web3-core');\nvar Method = require('web3-core-method');\nvar utils = require('web3-utils');\nvar Net = function () {\n var _this = this;\n // sets _requestmanager\n core.packageInit(this, arguments);\n [\n new Method({\n name: 'getId',\n call: 'net_version',\n params: 0,\n outputFormatter: parseInt\n }),\n new Method({\n name: 'isListening',\n call: 'net_listening',\n params: 0\n }),\n new Method({\n name: 'getPeerCount',\n call: 'net_peerCount',\n params: 0,\n outputFormatter: utils.hexToNumber\n })\n ].forEach(function (method) {\n method.attachToObject(_this);\n method.setRequestManager(_this._requestManager);\n });\n};\ncore.addProviders(Net);\nmodule.exports = Net;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file httpprovider.js\n * @authors:\n * Marek Kotewicz \n * Marian Oancea\n * Fabian Vogelsteller \n * @date 2015\n */\nvar errors = require('web3-core-helpers').errors;\nvar XHR2 = require('xhr2-cookies').XMLHttpRequest; // jshint ignore: line\nvar http = require('http');\nvar https = require('https');\n/**\n * HttpProvider should be used to send rpc calls over http\n */\nvar HttpProvider = function HttpProvider(host, options) {\n options = options || {};\n this.withCredentials = options.withCredentials || false;\n this.timeout = options.timeout || 0;\n this.headers = options.headers;\n this.agent = options.agent;\n this.connected = false;\n // keepAlive is true unless explicitly set to false\n const keepAlive = options.keepAlive !== false;\n this.host = host || 'http://localhost:8545';\n if (!this.agent) {\n if (this.host.substring(0, 5) === \"https\") {\n this.httpsAgent = new https.Agent({ keepAlive });\n }\n else {\n this.httpAgent = new http.Agent({ keepAlive });\n }\n }\n};\nHttpProvider.prototype._prepareRequest = function () {\n var request;\n // the current runtime is a browser\n if (typeof XMLHttpRequest !== 'undefined') {\n request = new XMLHttpRequest();\n }\n else {\n request = new XHR2();\n var agents = { httpsAgent: this.httpsAgent, httpAgent: this.httpAgent, baseUrl: this.baseUrl };\n if (this.agent) {\n agents.httpsAgent = this.agent.https;\n agents.httpAgent = this.agent.http;\n agents.baseUrl = this.agent.baseUrl;\n }\n request.nodejsSet(agents);\n }\n request.open('POST', this.host, true);\n request.setRequestHeader('Content-Type', 'application/json');\n request.timeout = this.timeout;\n request.withCredentials = this.withCredentials;\n if (this.headers) {\n this.headers.forEach(function (header) {\n request.setRequestHeader(header.name, header.value);\n });\n }\n return request;\n};\n/**\n * Should be used to make async request\n *\n * @method send\n * @param {Object} payload\n * @param {Function} callback triggered on end with (err, result)\n */\nHttpProvider.prototype.send = function (payload, callback) {\n var _this = this;\n var request = this._prepareRequest();\n request.onreadystatechange = function () {\n if (request.readyState === 4 && request.timeout !== 1) {\n var result = request.responseText;\n var error = null;\n try {\n result = JSON.parse(result);\n }\n catch (e) {\n error = errors.InvalidResponse(request.responseText);\n }\n _this.connected = true;\n callback(error, result);\n }\n };\n request.ontimeout = function () {\n _this.connected = false;\n callback(errors.ConnectionTimeout(this.timeout));\n };\n try {\n request.send(JSON.stringify(payload));\n }\n catch (error) {\n this.connected = false;\n callback(errors.InvalidConnection(this.host));\n }\n};\nHttpProvider.prototype.disconnect = function () {\n //NO OP\n};\n/**\n * Returns the desired boolean.\n *\n * @method supportsSubscriptions\n * @returns {boolean}\n */\nHttpProvider.prototype.supportsSubscriptions = function () {\n return false;\n};\nmodule.exports = HttpProvider;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/** @file index.js\n * @authors:\n * Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar errors = require('web3-core-helpers').errors;\nvar oboe = require('oboe');\nvar IpcProvider = function IpcProvider(path, net) {\n var _this = this;\n this.responseCallbacks = {};\n this.notificationCallbacks = [];\n this.path = path;\n this.connected = false;\n this.connection = net.connect({ path: this.path });\n this.addDefaultEvents();\n // LISTEN FOR CONNECTION RESPONSES\n var callback = function (result) {\n /*jshint maxcomplexity: 6 */\n var id = null;\n // get the id which matches the returned id\n if (Array.isArray(result)) {\n result.forEach(function (load) {\n if (_this.responseCallbacks[load.id])\n id = load.id;\n });\n }\n else {\n id = result.id;\n }\n // notification\n if (!id && result.method.indexOf('_subscription') !== -1) {\n _this.notificationCallbacks.forEach(function (callback) {\n if (typeof callback === 'function')\n callback(result);\n });\n // fire the callback\n }\n else if (_this.responseCallbacks[id]) {\n _this.responseCallbacks[id](null, result);\n delete _this.responseCallbacks[id];\n }\n };\n // use oboe.js for Sockets\n if (net.constructor.name === 'Socket') {\n oboe(this.connection)\n .done(callback);\n }\n else {\n this.connection.on('data', function (data) {\n _this._parseResponse(data.toString()).forEach(callback);\n });\n }\n};\n/**\nWill add the error and end event to timeout existing calls\n\n@method addDefaultEvents\n*/\nIpcProvider.prototype.addDefaultEvents = function () {\n var _this = this;\n this.connection.on('connect', function () {\n _this.connected = true;\n });\n this.connection.on('close', function () {\n _this.connected = false;\n });\n this.connection.on('error', function () {\n _this._timeout();\n });\n this.connection.on('end', function () {\n _this._timeout();\n });\n this.connection.on('timeout', function () {\n _this._timeout();\n });\n};\n/**\n Will parse the response and make an array out of it.\n\n NOTE, this exists for backwards compatibility reasons.\n\n @method _parseResponse\n @param {String} data\n */\nIpcProvider.prototype._parseResponse = function (data) {\n var _this = this, returnValues = [];\n // DE-CHUNKER\n var dechunkedData = data\n .replace(/\\}[\\n\\r]?\\{/g, '}|--|{') // }{\n .replace(/\\}\\][\\n\\r]?\\[\\{/g, '}]|--|[{') // }][{\n .replace(/\\}[\\n\\r]?\\[\\{/g, '}|--|[{') // }[{\n .replace(/\\}\\][\\n\\r]?\\{/g, '}]|--|{') // }]{\n .split('|--|');\n dechunkedData.forEach(function (data) {\n // prepend the last chunk\n if (_this.lastChunk)\n data = _this.lastChunk + data;\n var result = null;\n try {\n result = JSON.parse(data);\n }\n catch (e) {\n _this.lastChunk = data;\n // start timeout to cancel all requests\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunkTimeout = setTimeout(function () {\n _this._timeout();\n throw errors.InvalidResponse(data);\n }, 1000 * 15);\n return;\n }\n // cancel timeout and set chunk to null\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunk = null;\n if (result)\n returnValues.push(result);\n });\n return returnValues;\n};\n/**\nGet the adds a callback to the responseCallbacks object,\nwhich will be called if a response matching the response Id will arrive.\n\n@method _addResponseCallback\n*/\nIpcProvider.prototype._addResponseCallback = function (payload, callback) {\n var id = payload.id || payload[0].id;\n var method = payload.method || payload[0].method;\n this.responseCallbacks[id] = callback;\n this.responseCallbacks[id].method = method;\n};\n/**\nTimeout all requests when the end/error event is fired\n\n@method _timeout\n*/\nIpcProvider.prototype._timeout = function () {\n for (var key in this.responseCallbacks) {\n if (this.responseCallbacks.hasOwnProperty(key)) {\n this.responseCallbacks[key](errors.InvalidConnection('on IPC'));\n delete this.responseCallbacks[key];\n }\n }\n};\n/**\n Try to reconnect\n\n @method reconnect\n */\nIpcProvider.prototype.reconnect = function () {\n this.connection.connect({ path: this.path });\n};\nIpcProvider.prototype.send = function (payload, callback) {\n // try reconnect, when connection is gone\n if (!this.connection.writable)\n this.connection.connect({ path: this.path });\n this.connection.write(JSON.stringify(payload));\n this._addResponseCallback(payload, callback);\n};\n/**\nSubscribes to provider events.provider\n\n@method on\n@param {String} type 'notification', 'connect', 'error', 'end' or 'data'\n@param {Function} callback the callback to call\n*/\nIpcProvider.prototype.on = function (type, callback) {\n if (typeof callback !== 'function')\n throw new Error('The second parameter callback must be a function.');\n switch (type) {\n case 'data':\n this.notificationCallbacks.push(callback);\n break;\n // adds error, end, timeout, connect\n default:\n this.connection.on(type, callback);\n break;\n }\n};\n/**\n Subscribes to provider events.provider\n\n @method on\n @param {String} type 'connect', 'error', 'end' or 'data'\n @param {Function} callback the callback to call\n */\nIpcProvider.prototype.once = function (type, callback) {\n if (typeof callback !== 'function')\n throw new Error('The second parameter callback must be a function.');\n this.connection.once(type, callback);\n};\n/**\nRemoves event listener\n\n@method removeListener\n@param {String} type 'data', 'connect', 'error', 'end' or 'data'\n@param {Function} callback the callback to call\n*/\nIpcProvider.prototype.removeListener = function (type, callback) {\n var _this = this;\n switch (type) {\n case 'data':\n this.notificationCallbacks.forEach(function (cb, index) {\n if (cb === callback)\n _this.notificationCallbacks.splice(index, 1);\n });\n break;\n default:\n this.connection.removeListener(type, callback);\n break;\n }\n};\n/**\nRemoves all event listeners\n\n@method removeAllListeners\n@param {String} type 'data', 'connect', 'error', 'end' or 'data'\n*/\nIpcProvider.prototype.removeAllListeners = function (type) {\n switch (type) {\n case 'data':\n this.notificationCallbacks = [];\n break;\n default:\n this.connection.removeAllListeners(type);\n break;\n }\n};\n/**\nResets the providers, clears all callbacks\n\n@method reset\n*/\nIpcProvider.prototype.reset = function () {\n this._timeout();\n this.notificationCallbacks = [];\n this.connection.removeAllListeners('error');\n this.connection.removeAllListeners('end');\n this.connection.removeAllListeners('timeout');\n this.addDefaultEvents();\n};\n/**\n * Returns the desired boolean.\n *\n * @method supportsSubscriptions\n * @returns {boolean}\n */\nIpcProvider.prototype.supportsSubscriptions = function () {\n return true;\n};\nmodule.exports = IpcProvider;\n","var isNode = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\nvar isRN = typeof navigator !== 'undefined' && navigator.product === 'ReactNative';\nvar _btoa = null;\nvar helpers = null;\nif (isNode || isRN) {\n _btoa = function (str) {\n return Buffer.from(str).toString('base64');\n };\n var url = require('url');\n if (url.URL) {\n // Use the new Node 6+ API for parsing URLs that supports username/password\n var newURL = url.URL;\n helpers = function (url) {\n return new newURL(url);\n };\n }\n else {\n // Web3 supports Node.js 5, so fall back to the legacy URL API if necessary\n helpers = require('url').parse;\n }\n}\nelse {\n _btoa = btoa.bind(typeof globalThis === 'object' ? globalThis : self);\n helpers = function (url) {\n return new URL(url);\n };\n}\nmodule.exports = {\n parseURL: helpers,\n btoa: _btoa\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file WebsocketProvider.js\n * @authors: Samuel Furter , Fabian Vogelsteller \n * @date 2019\n */\n'use strict';\nvar EventEmitter = require('eventemitter3');\nvar helpers = require('./helpers.js');\nvar errors = require('web3-core-helpers').errors;\nvar Ws = require('websocket').w3cwebsocket;\n/**\n * @param {string} url\n * @param {Object} options\n *\n * @constructor\n */\nvar WebsocketProvider = function WebsocketProvider(url, options) {\n EventEmitter.call(this);\n options = options || {};\n this.url = url;\n this._customTimeout = options.timeout || 1000 * 15;\n this.headers = options.headers || {};\n this.protocol = options.protocol || undefined;\n this.reconnectOptions = Object.assign({\n auto: false,\n delay: 5000,\n maxAttempts: false,\n onTimeout: false\n }, options.reconnect);\n this.clientConfig = options.clientConfig || undefined; // Allow a custom client configuration\n this.requestOptions = options.requestOptions || undefined; // Allow a custom request options (https://github.com/theturtle32/WebSocket-Node/blob/master/docs/WebSocketClient.md#connectrequesturl-requestedprotocols-origin-headers-requestoptions)\n this.DATA = 'data';\n this.CLOSE = 'close';\n this.ERROR = 'error';\n this.CONNECT = 'connect';\n this.RECONNECT = 'reconnect';\n this.connection = null;\n this.requestQueue = new Map();\n this.responseQueue = new Map();\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n // The w3cwebsocket implementation does not support Basic Auth\n // username/password in the URL. So generate the basic auth header, and\n // pass through with any additional headers supplied in constructor\n var parsedURL = helpers.parseURL(url);\n if (parsedURL.username && parsedURL.password) {\n this.headers.authorization = 'Basic ' + helpers.btoa(parsedURL.username + ':' + parsedURL.password);\n }\n // When all node core implementations that do not have the\n // WHATWG compatible URL parser go out of service this line can be removed.\n if (parsedURL.auth) {\n this.headers.authorization = 'Basic ' + helpers.btoa(parsedURL.auth);\n }\n // make property `connected` which will return the current connection status\n Object.defineProperty(this, 'connected', {\n get: function () {\n return this.connection && this.connection.readyState === this.connection.OPEN;\n },\n enumerable: true\n });\n this.connect();\n};\n// Inherit from EventEmitter\nWebsocketProvider.prototype = Object.create(EventEmitter.prototype);\nWebsocketProvider.prototype.constructor = WebsocketProvider;\n/**\n * Connects to the configured node\n *\n * @method connect\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.connect = function () {\n this.connection = new Ws(this.url, this.protocol, undefined, this.headers, this.requestOptions, this.clientConfig);\n this._addSocketListeners();\n};\n/**\n * Listener for the `data` event of the underlying WebSocket object\n *\n * @method _onMessage\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._onMessage = function (e) {\n var _this = this;\n this._parseResponse((typeof e.data === 'string') ? e.data : '').forEach(function (result) {\n if (result.method && result.method.indexOf('_subscription') !== -1) {\n _this.emit(_this.DATA, result);\n return;\n }\n var id = result.id;\n // get the id which matches the returned id\n if (Array.isArray(result)) {\n id = result[0].id;\n }\n if (_this.responseQueue.has(id)) {\n if (_this.responseQueue.get(id).callback !== undefined) {\n _this.responseQueue.get(id).callback(false, result);\n }\n _this.responseQueue.delete(id);\n }\n });\n};\n/**\n * Listener for the `open` event of the underlying WebSocket object\n *\n * @method _onConnect\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._onConnect = function () {\n this.emit(this.CONNECT);\n this.reconnectAttempts = 0;\n this.reconnecting = false;\n if (this.requestQueue.size > 0) {\n var _this = this;\n this.requestQueue.forEach(function (request, key) {\n _this.send(request.payload, request.callback);\n _this.requestQueue.delete(key);\n });\n }\n};\n/**\n * Listener for the `close` event of the underlying WebSocket object\n *\n * @method _onClose\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._onClose = function (event) {\n var _this = this;\n if (this.reconnectOptions.auto && (![1000, 1001].includes(event.code) || event.wasClean === false)) {\n this.reconnect();\n return;\n }\n this.emit(this.CLOSE, event);\n if (this.requestQueue.size > 0) {\n this.requestQueue.forEach(function (request, key) {\n request.callback(errors.ConnectionNotOpenError(event));\n _this.requestQueue.delete(key);\n });\n }\n if (this.responseQueue.size > 0) {\n this.responseQueue.forEach(function (request, key) {\n request.callback(errors.InvalidConnection('on WS', event));\n _this.responseQueue.delete(key);\n });\n }\n this._removeSocketListeners();\n this.removeAllListeners();\n};\n/**\n * Will add the required socket listeners\n *\n * @method _addSocketListeners\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._addSocketListeners = function () {\n this.connection.addEventListener('message', this._onMessage.bind(this));\n this.connection.addEventListener('open', this._onConnect.bind(this));\n this.connection.addEventListener('close', this._onClose.bind(this));\n};\n/**\n * Will remove all socket listeners\n *\n * @method _removeSocketListeners\n *\n * @returns {void}\n */\nWebsocketProvider.prototype._removeSocketListeners = function () {\n this.connection.removeEventListener('message', this._onMessage);\n this.connection.removeEventListener('open', this._onConnect);\n this.connection.removeEventListener('close', this._onClose);\n};\n/**\n * Will parse the response and make an array out of it.\n *\n * @method _parseResponse\n *\n * @param {String} data\n *\n * @returns {Array}\n */\nWebsocketProvider.prototype._parseResponse = function (data) {\n var _this = this, returnValues = [];\n // DE-CHUNKER\n var dechunkedData = data\n .replace(/\\}[\\n\\r]?\\{/g, '}|--|{') // }{\n .replace(/\\}\\][\\n\\r]?\\[\\{/g, '}]|--|[{') // }][{\n .replace(/\\}[\\n\\r]?\\[\\{/g, '}|--|[{') // }[{\n .replace(/\\}\\][\\n\\r]?\\{/g, '}]|--|{') // }]{\n .split('|--|');\n dechunkedData.forEach(function (data) {\n // prepend the last chunk\n if (_this.lastChunk)\n data = _this.lastChunk + data;\n var result = null;\n try {\n result = JSON.parse(data);\n }\n catch (e) {\n _this.lastChunk = data;\n // start timeout to cancel all requests\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunkTimeout = setTimeout(function () {\n if (_this.reconnectOptions.auto && _this.reconnectOptions.onTimeout) {\n _this.reconnect();\n return;\n }\n _this.emit(_this.ERROR, errors.ConnectionTimeout(_this._customTimeout));\n if (_this.requestQueue.size > 0) {\n _this.requestQueue.forEach(function (request, key) {\n request.callback(errors.ConnectionTimeout(_this._customTimeout));\n _this.requestQueue.delete(key);\n });\n }\n }, _this._customTimeout);\n return;\n }\n // cancel timeout and set chunk to null\n clearTimeout(_this.lastChunkTimeout);\n _this.lastChunk = null;\n if (result)\n returnValues.push(result);\n });\n return returnValues;\n};\n/**\n * Does check if the provider is connecting and will add it to the queue or will send it directly\n *\n * @method send\n *\n * @param {Object} payload\n * @param {Function} callback\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.send = function (payload, callback) {\n var _this = this;\n var id = payload.id;\n var request = { payload: payload, callback: callback };\n if (Array.isArray(payload)) {\n id = payload[0].id;\n }\n if (this.connection.readyState === this.connection.CONNECTING || this.reconnecting) {\n this.requestQueue.set(id, request);\n return;\n }\n if (this.connection.readyState !== this.connection.OPEN) {\n this.requestQueue.delete(id);\n this.emit(this.ERROR, errors.ConnectionNotOpenError());\n request.callback(errors.ConnectionNotOpenError());\n return;\n }\n this.responseQueue.set(id, request);\n this.requestQueue.delete(id);\n try {\n this.connection.send(JSON.stringify(request.payload));\n }\n catch (error) {\n request.callback(error);\n _this.responseQueue.delete(id);\n }\n};\n/**\n * Resets the providers, clears all callbacks\n *\n * @method reset\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.reset = function () {\n this.responseQueue.clear();\n this.requestQueue.clear();\n this.removeAllListeners();\n this._removeSocketListeners();\n this._addSocketListeners();\n};\n/**\n * Closes the current connection with the given code and reason arguments\n *\n * @method disconnect\n *\n * @param {number} code\n * @param {string} reason\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.disconnect = function (code, reason) {\n this._removeSocketListeners();\n this.connection.close(code || 1000, reason);\n};\n/**\n * Returns the desired boolean.\n *\n * @method supportsSubscriptions\n *\n * @returns {boolean}\n */\nWebsocketProvider.prototype.supportsSubscriptions = function () {\n return true;\n};\n/**\n * Removes the listeners and reconnects to the socket.\n *\n * @method reconnect\n *\n * @returns {void}\n */\nWebsocketProvider.prototype.reconnect = function () {\n var _this = this;\n this.reconnecting = true;\n if (this.responseQueue.size > 0) {\n this.responseQueue.forEach(function (request, key) {\n request.callback(errors.PendingRequestsOnReconnectingError());\n _this.responseQueue.delete(key);\n });\n }\n if (!this.reconnectOptions.maxAttempts ||\n this.reconnectAttempts < this.reconnectOptions.maxAttempts) {\n setTimeout(function () {\n _this.reconnectAttempts++;\n _this._removeSocketListeners();\n _this.emit(_this.RECONNECT, _this.reconnectAttempts);\n _this.connect();\n }, this.reconnectOptions.delay);\n return;\n }\n this.emit(this.ERROR, errors.MaxAttemptsReachedOnReconnectingError());\n this.reconnecting = false;\n if (this.requestQueue.size > 0) {\n this.requestQueue.forEach(function (request, key) {\n request.callback(errors.MaxAttemptsReachedOnReconnectingError());\n _this.requestQueue.delete(key);\n });\n }\n};\nmodule.exports = WebsocketProvider;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\n\"use strict\";\nvar core = require('web3-core');\nvar Subscriptions = require('web3-core-subscriptions').subscriptions;\nvar Method = require('web3-core-method');\n// var formatters = require('web3-core-helpers').formatters;\nvar Net = require('web3-net');\nvar Shh = function Shh() {\n var _this = this;\n // sets _requestmanager\n core.packageInit(this, arguments);\n // overwrite package setRequestManager\n var setRequestManager = this.setRequestManager;\n this.setRequestManager = function (manager) {\n setRequestManager(manager);\n _this.net.setRequestManager(manager);\n return true;\n };\n // overwrite setProvider\n var setProvider = this.setProvider;\n this.setProvider = function () {\n setProvider.apply(_this, arguments);\n _this.setRequestManager(_this._requestManager);\n };\n this.net = new Net(this);\n [\n new Subscriptions({\n name: 'subscribe',\n type: 'shh',\n subscriptions: {\n 'messages': {\n params: 1\n // inputFormatter: [formatters.inputPostFormatter],\n // outputFormatter: formatters.outputPostFormatter\n }\n }\n }),\n new Method({\n name: 'getVersion',\n call: 'shh_version',\n params: 0\n }),\n new Method({\n name: 'getInfo',\n call: 'shh_info',\n params: 0\n }),\n new Method({\n name: 'setMaxMessageSize',\n call: 'shh_setMaxMessageSize',\n params: 1\n }),\n new Method({\n name: 'setMinPoW',\n call: 'shh_setMinPoW',\n params: 1\n }),\n new Method({\n name: 'markTrustedPeer',\n call: 'shh_markTrustedPeer',\n params: 1\n }),\n new Method({\n name: 'newKeyPair',\n call: 'shh_newKeyPair',\n params: 0\n }),\n new Method({\n name: 'addPrivateKey',\n call: 'shh_addPrivateKey',\n params: 1\n }),\n new Method({\n name: 'deleteKeyPair',\n call: 'shh_deleteKeyPair',\n params: 1\n }),\n new Method({\n name: 'hasKeyPair',\n call: 'shh_hasKeyPair',\n params: 1\n }),\n new Method({\n name: 'getPublicKey',\n call: 'shh_getPublicKey',\n params: 1\n }),\n new Method({\n name: 'getPrivateKey',\n call: 'shh_getPrivateKey',\n params: 1\n }),\n new Method({\n name: 'newSymKey',\n call: 'shh_newSymKey',\n params: 0\n }),\n new Method({\n name: 'addSymKey',\n call: 'shh_addSymKey',\n params: 1\n }),\n new Method({\n name: 'generateSymKeyFromPassword',\n call: 'shh_generateSymKeyFromPassword',\n params: 1\n }),\n new Method({\n name: 'hasSymKey',\n call: 'shh_hasSymKey',\n params: 1\n }),\n new Method({\n name: 'getSymKey',\n call: 'shh_getSymKey',\n params: 1\n }),\n new Method({\n name: 'deleteSymKey',\n call: 'shh_deleteSymKey',\n params: 1\n }),\n new Method({\n name: 'newMessageFilter',\n call: 'shh_newMessageFilter',\n params: 1\n }),\n new Method({\n name: 'getFilterMessages',\n call: 'shh_getFilterMessages',\n params: 1\n }),\n new Method({\n name: 'deleteMessageFilter',\n call: 'shh_deleteMessageFilter',\n params: 1\n }),\n new Method({\n name: 'post',\n call: 'shh_post',\n params: 1,\n inputFormatter: [null]\n }),\n new Method({\n name: 'unsubscribe',\n call: 'shh_unsubscribe',\n params: 1\n })\n ].forEach(function (method) {\n method.attachToObject(_this);\n method.setRequestManager(_this._requestManager);\n });\n};\nShh.prototype.clearSubscriptions = function () {\n this._requestManager.clearSubscriptions();\n};\ncore.addProviders(Shh);\nmodule.exports = Shh;\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file utils.js\n * @author Marek Kotewicz \n * @author Fabian Vogelsteller \n * @date 2017\n */\nvar ethjsUnit = require('ethjs-unit');\nvar utils = require('./utils.js');\nvar soliditySha3 = require('./soliditySha3.js');\nvar randombytes = require('randombytes');\nvar BN = require('bn.js');\n/**\n * Fires an error in an event emitter and callback and returns the eventemitter\n *\n * @method _fireError\n * @param {Object} error a string, a error, or an object with {message, data}\n * @param {Object} emitter\n * @param {Function} reject\n * @param {Function} callback\n * @param {any} optionalData\n * @return {Object} the emitter\n */\nvar _fireError = function (error, emitter, reject, callback, optionalData) {\n /*jshint maxcomplexity: 10 */\n // add data if given\n if (!!error && typeof error === 'object' && !(error instanceof Error) && error.data) {\n if (!!error.data && typeof error.data === 'object' || Array.isArray(error.data)) {\n error.data = JSON.stringify(error.data, null, 2);\n }\n error = error.message + \"\\n\" + error.data;\n }\n if (typeof error === 'string') {\n error = new Error(error);\n }\n if (typeof callback === 'function') {\n callback(error, optionalData);\n }\n if (typeof reject === 'function') {\n // suppress uncatched error if an error listener is present\n // OR suppress uncatched error if an callback listener is present\n if (emitter &&\n (typeof emitter.listeners === 'function' &&\n emitter.listeners('error').length) || typeof callback === 'function') {\n emitter.catch(function () { });\n }\n // reject later, to be able to return emitter\n setTimeout(function () {\n reject(error);\n }, 1);\n }\n if (emitter && typeof emitter.emit === 'function') {\n // emit later, to be able to return emitter\n setTimeout(function () {\n emitter.emit('error', error, optionalData);\n emitter.removeAllListeners();\n }, 1);\n }\n return emitter;\n};\n/**\n * Should be used to create full function/event name from json abi\n *\n * @method _jsonInterfaceMethodToString\n * @param {Object} json\n * @return {String} full function/event name\n */\nvar _jsonInterfaceMethodToString = function (json) {\n if (!!json && typeof json === 'object' && json.name && json.name.indexOf('(') !== -1) {\n return json.name;\n }\n return json.name + '(' + _flattenTypes(false, json.inputs).join(',') + ')';\n};\n/**\n * Should be used to flatten json abi inputs/outputs into an array of type-representing-strings\n *\n * @method _flattenTypes\n * @param {bool} includeTuple\n * @param {Object} puts\n * @return {Array} parameters as strings\n */\nvar _flattenTypes = function (includeTuple, puts) {\n // console.log(\"entered _flattenTypes. inputs/outputs: \" + puts)\n var types = [];\n puts.forEach(function (param) {\n if (typeof param.components === 'object') {\n if (param.type.substring(0, 5) !== 'tuple') {\n throw new Error('components found but type is not tuple; report on GitHub');\n }\n var suffix = '';\n var arrayBracket = param.type.indexOf('[');\n if (arrayBracket >= 0) {\n suffix = param.type.substring(arrayBracket);\n }\n var result = _flattenTypes(includeTuple, param.components);\n // console.log(\"result should have things: \" + result)\n if (Array.isArray(result) && includeTuple) {\n // console.log(\"include tuple word, and its an array. joining...: \" + result.types)\n types.push('tuple(' + result.join(',') + ')' + suffix);\n }\n else if (!includeTuple) {\n // console.log(\"don't include tuple, but its an array. joining...: \" + result)\n types.push('(' + result.join(',') + ')' + suffix);\n }\n else {\n // console.log(\"its a single type within a tuple: \" + result.types)\n types.push('(' + result + ')');\n }\n }\n else {\n // console.log(\"its a type and not directly in a tuple: \" + param.type)\n types.push(param.type);\n }\n });\n return types;\n};\n/**\n * Returns a random hex string by the given bytes size\n *\n * @param {Number} size\n * @returns {string}\n */\nvar randomHex = function (size) {\n return '0x' + randombytes(size).toString('hex');\n};\n/**\n * Should be called to get ascii from it's hex representation\n *\n * @method hexToAscii\n * @param {String} hex\n * @returns {String} ascii string representation of hex value\n */\nvar hexToAscii = function (hex) {\n if (!utils.isHexStrict(hex))\n throw new Error('The parameter must be a valid HEX string.');\n var str = \"\";\n var i = 0, l = hex.length;\n if (hex.substring(0, 2) === '0x') {\n i = 2;\n }\n for (; i < l; i += 2) {\n var code = parseInt(hex.substr(i, 2), 16);\n str += String.fromCharCode(code);\n }\n return str;\n};\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @method asciiToHex\n * @param {String} str\n * @returns {String} hex representation of input string\n */\nvar asciiToHex = function (str) {\n if (!str)\n return \"0x00\";\n var hex = \"\";\n for (var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n }\n return \"0x\" + hex;\n};\n/**\n * Returns value of unit in Wei\n *\n * @method getUnitValue\n * @param {String} unit the unit to convert to, default ether\n * @returns {BN} value of the unit (in Wei)\n * @throws error if the unit is not correct:w\n */\nvar getUnitValue = function (unit) {\n unit = unit ? unit.toLowerCase() : 'ether';\n if (!ethjsUnit.unitMap[unit]) {\n throw new Error('This unit \"' + unit + '\" doesn\\'t exist, please use the one of the following units' + JSON.stringify(ethjsUnit.unitMap, null, 2));\n }\n return unit;\n};\n/**\n * Takes a number of wei and converts it to any other ether unit.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method fromWei\n * @param {Number|String} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert to, default ether\n * @return {String|Object} When given a BN object it returns one as well, otherwise a number\n */\nvar fromWei = function (number, unit) {\n unit = getUnitValue(unit);\n if (!utils.isBN(number) && !(typeof number === 'string')) {\n throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.');\n }\n return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10);\n};\n/**\n * Takes a number of a unit and converts it to wei.\n *\n * Possible units are:\n * SI Short SI Full Effigy Other\n * - kwei femtoether babbage\n * - mwei picoether lovelace\n * - gwei nanoether shannon nano\n * - -- microether szabo micro\n * - -- microether szabo micro\n * - -- milliether finney milli\n * - ether -- --\n * - kether -- grand\n * - mether\n * - gether\n * - tether\n *\n * @method toWei\n * @param {Number|String|BN} number can be a number, number string or a HEX of a decimal\n * @param {String} unit the unit to convert from, default ether\n * @return {String|Object} When given a BN object it returns one as well, otherwise a number\n */\nvar toWei = function (number, unit) {\n unit = getUnitValue(unit);\n if (!utils.isBN(number) && !(typeof number === 'string')) {\n throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.');\n }\n return utils.isBN(number) ? ethjsUnit.toWei(number, unit) : ethjsUnit.toWei(number, unit).toString(10);\n};\n/**\n * Converts to a checksum address\n *\n * @method toChecksumAddress\n * @param {String} address the given HEX address\n * @return {String}\n */\nvar toChecksumAddress = function (address) {\n if (typeof address === 'undefined')\n return '';\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address))\n throw new Error('Given address \"' + address + '\" is not a valid Ethereum address.');\n address = address.toLowerCase().replace(/^0x/i, '');\n var addressHash = utils.sha3(address).replace(/^0x/i, '');\n var checksumAddress = '0x';\n for (var i = 0; i < address.length; i++) {\n // If ith character is 8 to f then make it uppercase\n if (parseInt(addressHash[i], 16) > 7) {\n checksumAddress += address[i].toUpperCase();\n }\n else {\n checksumAddress += address[i];\n }\n }\n return checksumAddress;\n};\n/**\n * Returns -1 if ab; 0 if a == b.\n * For more details on this type of function, see\n * developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n *\n * @method compareBlockNumbers\n *\n * @param {String|Number|BN} a\n *\n * @param {String|Number|BN} b\n *\n * @returns {Number} -1, 0, or 1\n */\nvar compareBlockNumbers = function (a, b) {\n if (a == b) {\n return 0;\n }\n else if ((\"genesis\" == a || \"earliest\" == a || 0 == a) && (\"genesis\" == b || \"earliest\" == b || 0 == b)) {\n return 0;\n }\n else if (\"genesis\" == a || \"earliest\" == a) {\n // b !== a, thus a < b\n return -1;\n }\n else if (\"genesis\" == b || \"earliest\" == b) {\n // b !== a, thus a > b\n return 1;\n }\n else if (a == \"latest\") {\n if (b == \"pending\") {\n return -1;\n }\n else {\n // b !== (\"pending\" OR \"latest\"), thus a > b\n return 1;\n }\n }\n else if (b === \"latest\") {\n if (a == \"pending\") {\n return 1;\n }\n else {\n // b !== (\"pending\" OR \"latest\"), thus a > b\n return -1;\n }\n }\n else if (a == \"pending\") {\n // b (== OR <) \"latest\", thus a > b\n return 1;\n }\n else if (b == \"pending\") {\n return -1;\n }\n else {\n let bnA = new BN(a);\n let bnB = new BN(b);\n if (bnA.lt(bnB)) {\n return -1;\n }\n else if (bnA.eq(bnB)) {\n return 0;\n }\n else {\n return 1;\n }\n }\n};\nmodule.exports = {\n _fireError: _fireError,\n _jsonInterfaceMethodToString: _jsonInterfaceMethodToString,\n _flattenTypes: _flattenTypes,\n // extractDisplayName: extractDisplayName,\n // extractTypeName: extractTypeName,\n randomHex: randomHex,\n BN: utils.BN,\n isBN: utils.isBN,\n isBigNumber: utils.isBigNumber,\n isHex: utils.isHex,\n isHexStrict: utils.isHexStrict,\n sha3: utils.sha3,\n sha3Raw: utils.sha3Raw,\n keccak256: utils.sha3,\n soliditySha3: soliditySha3.soliditySha3,\n soliditySha3Raw: soliditySha3.soliditySha3Raw,\n encodePacked: soliditySha3.encodePacked,\n isAddress: utils.isAddress,\n checkAddressChecksum: utils.checkAddressChecksum,\n toChecksumAddress: toChecksumAddress,\n toHex: utils.toHex,\n toBN: utils.toBN,\n bytesToHex: utils.bytesToHex,\n hexToBytes: utils.hexToBytes,\n hexToNumberString: utils.hexToNumberString,\n hexToNumber: utils.hexToNumber,\n toDecimal: utils.hexToNumber,\n numberToHex: utils.numberToHex,\n fromDecimal: utils.numberToHex,\n hexToUtf8: utils.hexToUtf8,\n hexToString: utils.hexToUtf8,\n toUtf8: utils.hexToUtf8,\n stripHexPrefix: utils.stripHexPrefix,\n utf8ToHex: utils.utf8ToHex,\n stringToHex: utils.utf8ToHex,\n fromUtf8: utils.utf8ToHex,\n hexToAscii: hexToAscii,\n toAscii: hexToAscii,\n asciiToHex: asciiToHex,\n fromAscii: asciiToHex,\n unitMap: ethjsUnit.unitMap,\n toWei: toWei,\n fromWei: fromWei,\n padLeft: utils.leftPad,\n leftPad: utils.leftPad,\n padRight: utils.rightPad,\n rightPad: utils.rightPad,\n toTwosComplement: utils.toTwosComplement,\n isBloom: utils.isBloom,\n isUserEthereumAddressInBloom: utils.isUserEthereumAddressInBloom,\n isContractAddressInBloom: utils.isContractAddressInBloom,\n isTopic: utils.isTopic,\n isTopicInBloom: utils.isTopicInBloom,\n isInBloom: utils.isInBloom,\n compareBlockNumbers: compareBlockNumbers,\n toNumber: utils.toNumber\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file soliditySha3.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\nvar BN = require('bn.js');\nvar utils = require('./utils.js');\nvar _elementaryName = function (name) {\n /*jshint maxcomplexity:false */\n if (name.startsWith('int[')) {\n return 'int256' + name.slice(3);\n }\n else if (name === 'int') {\n return 'int256';\n }\n else if (name.startsWith('uint[')) {\n return 'uint256' + name.slice(4);\n }\n else if (name === 'uint') {\n return 'uint256';\n }\n else if (name.startsWith('fixed[')) {\n return 'fixed128x128' + name.slice(5);\n }\n else if (name === 'fixed') {\n return 'fixed128x128';\n }\n else if (name.startsWith('ufixed[')) {\n return 'ufixed128x128' + name.slice(6);\n }\n else if (name === 'ufixed') {\n return 'ufixed128x128';\n }\n return name;\n};\n// Parse N from type\nvar _parseTypeN = function (type) {\n var typesize = /^\\D+(\\d+).*$/.exec(type);\n return typesize ? parseInt(typesize[1], 10) : null;\n};\n// Parse N from type[]\nvar _parseTypeNArray = function (type) {\n var arraySize = /^\\D+\\d*\\[(\\d+)\\]$/.exec(type);\n return arraySize ? parseInt(arraySize[1], 10) : null;\n};\nvar _parseNumber = function (arg) {\n var type = typeof arg;\n if (type === 'string') {\n if (utils.isHexStrict(arg)) {\n return new BN(arg.replace(/0x/i, ''), 16);\n }\n else {\n return new BN(arg, 10);\n }\n }\n else if (type === 'number') {\n return new BN(arg);\n }\n else if (utils.isBigNumber(arg)) {\n return new BN(arg.toString(10));\n }\n else if (utils.isBN(arg)) {\n return arg;\n }\n else {\n throw new Error(arg + ' is not a number');\n }\n};\nvar _solidityPack = function (type, value, arraySize) {\n /*jshint maxcomplexity:false */\n var size, num;\n type = _elementaryName(type);\n if (type === 'bytes') {\n if (value.replace(/^0x/i, '').length % 2 !== 0) {\n throw new Error('Invalid bytes characters ' + value.length);\n }\n return value;\n }\n else if (type === 'string') {\n return utils.utf8ToHex(value);\n }\n else if (type === 'bool') {\n return value ? '01' : '00';\n }\n else if (type.startsWith('address')) {\n if (arraySize) {\n size = 64;\n }\n else {\n size = 40;\n }\n if (!utils.isAddress(value)) {\n throw new Error(value + ' is not a valid address, or the checksum is invalid.');\n }\n return utils.leftPad(value.toLowerCase(), size);\n }\n size = _parseTypeN(type);\n if (type.startsWith('bytes')) {\n if (!size) {\n throw new Error('bytes[] not yet supported in solidity');\n }\n // must be 32 byte slices when in an array\n if (arraySize) {\n size = 32;\n }\n if (size < 1 || size > 32 || size < value.replace(/^0x/i, '').length / 2) {\n throw new Error('Invalid bytes' + size + ' for ' + value);\n }\n return utils.rightPad(value, size * 2);\n }\n else if (type.startsWith('uint')) {\n if ((size % 8) || (size < 8) || (size > 256)) {\n throw new Error('Invalid uint' + size + ' size');\n }\n num = _parseNumber(value);\n if (num.bitLength() > size) {\n throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength());\n }\n if (num.lt(new BN(0))) {\n throw new Error('Supplied uint ' + num.toString() + ' is negative');\n }\n return size ? utils.leftPad(num.toString('hex'), size / 8 * 2) : num;\n }\n else if (type.startsWith('int')) {\n if ((size % 8) || (size < 8) || (size > 256)) {\n throw new Error('Invalid int' + size + ' size');\n }\n num = _parseNumber(value);\n if (num.bitLength() > size) {\n throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength());\n }\n if (num.lt(new BN(0))) {\n return num.toTwos(size).toString('hex');\n }\n else {\n return size ? utils.leftPad(num.toString('hex'), size / 8 * 2) : num;\n }\n }\n else {\n // FIXME: support all other types\n throw new Error('Unsupported or invalid type: ' + type);\n }\n};\nvar _processSolidityEncodePackedArgs = function (arg) {\n /*jshint maxcomplexity:false */\n if (Array.isArray(arg)) {\n throw new Error('Autodetection of array types is not supported.');\n }\n var type, value = '';\n var hexArg, arraySize;\n // if type is given\n if (!!arg && typeof arg === 'object' && (arg.hasOwnProperty('v') || arg.hasOwnProperty('t') || arg.hasOwnProperty('value') || arg.hasOwnProperty('type'))) {\n type = arg.hasOwnProperty('t') ? arg.t : arg.type;\n value = arg.hasOwnProperty('v') ? arg.v : arg.value;\n // otherwise try to guess the type\n }\n else {\n type = utils.toHex(arg, true);\n value = utils.toHex(arg);\n if (!type.startsWith('int') && !type.startsWith('uint')) {\n type = 'bytes';\n }\n }\n if ((type.startsWith('int') || type.startsWith('uint')) && typeof value === 'string' && !/^(-)?0x/i.test(value)) {\n value = new BN(value);\n }\n // get the array size\n if (Array.isArray(value)) {\n arraySize = _parseTypeNArray(type);\n if (arraySize && value.length !== arraySize) {\n throw new Error(type + ' is not matching the given array ' + JSON.stringify(value));\n }\n else {\n arraySize = value.length;\n }\n }\n if (Array.isArray(value)) {\n hexArg = value.map(function (val) {\n return _solidityPack(type, val, arraySize).toString('hex').replace('0x', '');\n });\n return hexArg.join('');\n }\n else {\n hexArg = _solidityPack(type, value, arraySize);\n return hexArg.toString('hex').replace('0x', '');\n }\n};\n/**\n * Hashes solidity values to a sha3 hash using keccak 256\n *\n * @method soliditySha3\n * @return {Object} the sha3\n */\nvar soliditySha3 = function () {\n /*jshint maxcomplexity:false */\n var args = Array.prototype.slice.call(arguments);\n var hexArgs = args.map(_processSolidityEncodePackedArgs);\n // console.log(args, hexArgs);\n // console.log('0x'+ hexArgs.join(''));\n return utils.sha3('0x' + hexArgs.join(''));\n};\n/**\n * Hashes solidity values to a sha3 hash using keccak 256 but does return the hash of value `null` instead of `null`\n *\n * @method soliditySha3Raw\n * @return {Object} the sha3\n */\nvar soliditySha3Raw = function () {\n return utils.sha3Raw('0x' + Array.prototype.slice.call(arguments).map(_processSolidityEncodePackedArgs).join(''));\n};\n/**\n * Encode packed args to hex\n *\n * @method encodePacked\n * @return {String} the hex encoded arguments\n */\nvar encodePacked = function () {\n /*jshint maxcomplexity:false */\n var args = Array.prototype.slice.call(arguments);\n var hexArgs = args.map(_processSolidityEncodePackedArgs);\n return '0x' + hexArgs.join('').toLowerCase();\n};\nmodule.exports = {\n soliditySha3: soliditySha3,\n soliditySha3Raw: soliditySha3Raw,\n encodePacked: encodePacked\n};\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n */\n/**\n * @file utils.js\n * @author Fabian Vogelsteller \n * @date 2017\n */\nvar BN = require('bn.js');\nvar numberToBN = require('number-to-bn');\nvar utf8 = require('utf8');\nvar ethereumjsUtil = require('ethereumjs-util');\nvar ethereumBloomFilters = require('ethereum-bloom-filters');\n/**\n * Returns true if object is BN, otherwise false\n *\n * @method isBN\n * @param {Object} object\n * @return {Boolean}\n */\nvar isBN = function (object) {\n return BN.isBN(object);\n};\n/**\n * Returns true if object is BigNumber, otherwise false\n *\n * @method isBigNumber\n * @param {Object} object\n * @return {Boolean}\n */\nvar isBigNumber = function (object) {\n return object && object.constructor && object.constructor.name === 'BigNumber';\n};\n/**\n * Takes an input and transforms it into an BN\n *\n * @method toBN\n * @param {Number|String|BN} number, string, HEX string or BN\n * @return {BN} BN\n */\nvar toBN = function (number) {\n try {\n return numberToBN.apply(null, arguments);\n }\n catch (e) {\n throw new Error(e + ' Given value: \"' + number + '\"');\n }\n};\n/**\n * Takes and input transforms it into BN and if it is negative value, into two's complement\n *\n * @method toTwosComplement\n * @param {Number|String|BN} number\n * @return {String}\n */\nvar toTwosComplement = function (number) {\n return '0x' + toBN(number).toTwos(256).toString(16, 64);\n};\n/**\n * Checks if the given string is an address\n *\n * @method isAddress\n * @param {String} address the given HEX address\n * @return {Boolean}\n */\nvar isAddress = function (address) {\n // check if it has the basic requirements of an address\n if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {\n return false;\n // If it's ALL lowercase or ALL upppercase\n }\n else if (/^(0x|0X)?[0-9a-f]{40}$/.test(address) || /^(0x|0X)?[0-9A-F]{40}$/.test(address)) {\n return true;\n // Otherwise check each case\n }\n else {\n return checkAddressChecksum(address);\n }\n};\n/**\n * Checks if the given string is a checksummed address\n *\n * @method checkAddressChecksum\n * @param {String} address the given HEX address\n * @return {Boolean}\n */\nvar checkAddressChecksum = function (address) {\n // Check each case\n address = address.replace(/^0x/i, '');\n var addressHash = sha3(address.toLowerCase()).replace(/^0x/i, '');\n for (var i = 0; i < 40; i++) {\n // the nth letter should be uppercase if the nth digit of casemap is 1\n if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {\n return false;\n }\n }\n return true;\n};\n/**\n * Should be called to pad string to expected length\n *\n * @method leftPad\n * @param {String} string to be padded\n * @param {Number} chars that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar leftPad = function (string, chars, sign) {\n var hasPrefix = /^0x/i.test(string) || typeof string === 'number';\n string = string.toString(16).replace(/^0x/i, '');\n var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0;\n return (hasPrefix ? '0x' : '') + new Array(padding).join(sign ? sign : \"0\") + string;\n};\n/**\n * Should be called to pad string to expected length\n *\n * @method rightPad\n * @param {String} string to be padded\n * @param {Number} chars that result string should have\n * @param {String} sign, by default 0\n * @returns {String} right aligned string\n */\nvar rightPad = function (string, chars, sign) {\n var hasPrefix = /^0x/i.test(string) || typeof string === 'number';\n string = string.toString(16).replace(/^0x/i, '');\n var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0;\n return (hasPrefix ? '0x' : '') + string + (new Array(padding).join(sign ? sign : \"0\"));\n};\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @method utf8ToHex\n * @param {String} str\n * @returns {String} hex representation of input string\n */\nvar utf8ToHex = function (str) {\n str = utf8.encode(str);\n var hex = \"\";\n // remove \\u0000 padding from either side\n str = str.replace(/^(?:\\u0000)*/, '');\n str = str.split(\"\").reverse().join(\"\");\n str = str.replace(/^(?:\\u0000)*/, '');\n str = str.split(\"\").reverse().join(\"\");\n for (var i = 0; i < str.length; i++) {\n var code = str.charCodeAt(i);\n // if (code !== 0) {\n var n = code.toString(16);\n hex += n.length < 2 ? '0' + n : n;\n // }\n }\n return \"0x\" + hex;\n};\n/**\n * Should be called to get utf8 from it's hex representation\n *\n * @method hexToUtf8\n * @param {String} hex\n * @returns {String} ascii string representation of hex value\n */\nvar hexToUtf8 = function (hex) {\n if (!isHexStrict(hex))\n throw new Error('The parameter \"' + hex + '\" must be a valid HEX string.');\n var str = \"\";\n var code = 0;\n hex = hex.replace(/^0x/i, '');\n // remove 00 padding from either side\n hex = hex.replace(/^(?:00)*/, '');\n hex = hex.split(\"\").reverse().join(\"\");\n hex = hex.replace(/^(?:00)*/, '');\n hex = hex.split(\"\").reverse().join(\"\");\n var l = hex.length;\n for (var i = 0; i < l; i += 2) {\n code = parseInt(hex.substr(i, 2), 16);\n // if (code !== 0) {\n str += String.fromCharCode(code);\n // }\n }\n return utf8.decode(str);\n};\n/**\n * Converts value to it's number representation\n *\n * @method hexToNumber\n * @param {String|Number|BN} value\n * @return {String}\n */\nvar hexToNumber = function (value) {\n if (!value) {\n return value;\n }\n if (typeof value === 'string' && !isHexStrict(value)) {\n throw new Error('Given value \"' + value + '\" is not a valid hex string.');\n }\n return toBN(value).toNumber();\n};\n/**\n * Converts value to it's decimal representation in string\n *\n * @method hexToNumberString\n * @param {String|Number|BN} value\n * @return {String}\n */\nvar hexToNumberString = function (value) {\n if (!value)\n return value;\n if (typeof value === 'string' && !isHexStrict(value)) {\n throw new Error('Given value \"' + value + '\" is not a valid hex string.');\n }\n return toBN(value).toString(10);\n};\n/**\n * Converts value to it's hex representation\n *\n * @method numberToHex\n * @param {String|Number|BN} value\n * @return {String}\n */\nvar numberToHex = function (value) {\n if ((value === null || value === undefined)) {\n return value;\n }\n if (!isFinite(value) && !isHexStrict(value)) {\n throw new Error('Given input \"' + value + '\" is not a number.');\n }\n var number = toBN(value);\n var result = number.toString(16);\n return number.lt(new BN(0)) ? '-0x' + result.substr(1) : '0x' + result;\n};\n/**\n * Convert a byte array to a hex string\n *\n * Note: Implementation from crypto-js\n *\n * @method bytesToHex\n * @param {Array} bytes\n * @return {String} the hex string\n */\nvar bytesToHex = function (bytes) {\n for (var hex = [], i = 0; i < bytes.length; i++) {\n /* jshint ignore:start */\n hex.push((bytes[i] >>> 4).toString(16));\n hex.push((bytes[i] & 0xF).toString(16));\n /* jshint ignore:end */\n }\n return '0x' + hex.join(\"\");\n};\n/**\n * Convert a hex string to a byte array\n *\n * Note: Implementation from crypto-js\n *\n * @method hexToBytes\n * @param {string} hex\n * @return {Array} the byte array\n */\nvar hexToBytes = function (hex) {\n hex = hex.toString(16);\n if (!isHexStrict(hex)) {\n throw new Error('Given value \"' + hex + '\" is not a valid hex string.');\n }\n hex = hex.replace(/^0x/i, '');\n for (var bytes = [], c = 0; c < hex.length; c += 2)\n bytes.push(parseInt(hex.substr(c, 2), 16));\n return bytes;\n};\n/**\n * Auto converts any given value into it's hex representation.\n *\n * And even stringifys objects before.\n *\n * @method toHex\n * @param {String|Number|BN|Object|Buffer} value\n * @param {Boolean} returnType\n * @return {String}\n */\nvar toHex = function (value, returnType) {\n /*jshint maxcomplexity: false */\n if (isAddress(value)) {\n return returnType ? 'address' : '0x' + value.toLowerCase().replace(/^0x/i, '');\n }\n if (typeof value === 'boolean') {\n return returnType ? 'bool' : value ? '0x01' : '0x00';\n }\n if (Buffer.isBuffer(value)) {\n return '0x' + value.toString('hex');\n }\n if (typeof value === 'object' && !!value && !isBigNumber(value) && !isBN(value)) {\n return returnType ? 'string' : utf8ToHex(JSON.stringify(value));\n }\n // if its a negative number, pass it through numberToHex\n if (typeof value === 'string') {\n if (value.indexOf('-0x') === 0 || value.indexOf('-0X') === 0) {\n return returnType ? 'int256' : numberToHex(value);\n }\n else if (value.indexOf('0x') === 0 || value.indexOf('0X') === 0) {\n return returnType ? 'bytes' : value;\n }\n else if (!isFinite(value)) {\n return returnType ? 'string' : utf8ToHex(value);\n }\n }\n return returnType ? (value < 0 ? 'int256' : 'uint256') : numberToHex(value);\n};\n/**\n * Check if string is HEX, requires a 0x in front\n *\n * @method isHexStrict\n * @param {String} hex to be checked\n * @returns {Boolean}\n */\nvar isHexStrict = function (hex) {\n return ((typeof hex === 'string' || typeof hex === 'number') && /^(-)?0x[0-9a-f]*$/i.test(hex));\n};\n/**\n * Check if string is HEX\n *\n * @method isHex\n * @param {String} hex to be checked\n * @returns {Boolean}\n */\nvar isHex = function (hex) {\n return ((typeof hex === 'string' || typeof hex === 'number') && /^(-0x|0x)?[0-9a-f]*$/i.test(hex));\n};\n/**\n * Remove 0x prefix from string\n *\n * @method stripHexPrefix\n * @param {String} str to be checked\n * @returns {String}\n */\nvar stripHexPrefix = function (str) {\n if (str !== 0 && isHex(str))\n return str.replace(/^(-)?0x/i, '$1');\n return str;\n};\n/**\n * Returns true if given string is a valid Ethereum block header bloom.\n *\n * @method isBloom\n * @param {String} bloom encoded bloom filter\n * @return {Boolean}\n */\nvar isBloom = function (bloom) {\n return ethereumBloomFilters.isBloom(bloom);\n};\n/**\n * Returns true if the ethereum users address is part of the given bloom\n * note: false positives are possible.\n *\n * @method isUserEthereumAddressInBloom\n * @param {String} ethereumAddress encoded bloom filter\n * @param {String} bloom ethereum addresss\n * @return {Boolean}\n */\nvar isUserEthereumAddressInBloom = function (bloom, ethereumAddress) {\n return ethereumBloomFilters.isUserEthereumAddressInBloom(bloom, ethereumAddress);\n};\n/**\n * Returns true if the contract address is part of the given bloom\n * note: false positives are possible.\n *\n * @method isUserEthereumAddressInBloom\n * @param {String} bloom encoded bloom filter\n * @param {String} contractAddress contract addresss\n * @return {Boolean}\n */\nvar isContractAddressInBloom = function (bloom, contractAddress) {\n return ethereumBloomFilters.isContractAddressInBloom(bloom, contractAddress);\n};\n/**\n * Returns true if given string is a valid log topic.\n *\n * @method isTopic\n * @param {String} topic encoded topic\n * @return {Boolean}\n */\nvar isTopic = function (topic) {\n return ethereumBloomFilters.isTopic(topic);\n};\n/**\n * Returns true if the topic is part of the given bloom\n * note: false positives are possible.\n *\n * @method isTopicInBloom\n * @param {String} bloom encoded bloom filter\n * @param {String} topic encoded topic\n * @return {Boolean}\n */\nvar isTopicInBloom = function (bloom, topic) {\n return ethereumBloomFilters.isTopicInBloom(bloom, topic);\n};\n/**\n * Returns true if the value is part of the given bloom\n * note: false positives are possible.\n *\n * @method isInBloom\n * @param {String} bloom encoded bloom filter\n * @param {String | Uint8Array} topic encoded value\n * @return {Boolean}\n */\nvar isInBloom = function (bloom, topic) {\n return ethereumBloomFilters.isInBloom(bloom, topic);\n};\n/**\n * Hashes values to a sha3 hash using keccak 256\n *\n * To hash a HEX string the hex must have 0x in front.\n *\n * @method sha3\n * @return {String} the sha3 string\n */\nvar SHA3_NULL_S = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';\nvar sha3 = function (value) {\n if (isBN(value)) {\n value = value.toString();\n }\n if (isHexStrict(value) && /^0x/i.test((value).toString())) {\n value = ethereumjsUtil.toBuffer(value);\n }\n else if (typeof value === 'string') {\n // Assume value is an arbitrary string\n value = Buffer.from(value, 'utf-8');\n }\n var returnValue = ethereumjsUtil.bufferToHex(ethereumjsUtil.keccak256(value));\n if (returnValue === SHA3_NULL_S) {\n return null;\n }\n else {\n return returnValue;\n }\n};\n// expose the under the hood keccak256\nsha3._Hash = ethereumjsUtil.keccak256;\n/**\n * @method sha3Raw\n *\n * @param value\n *\n * @returns {string}\n */\nvar sha3Raw = function (value) {\n value = sha3(value);\n if (value === null) {\n return SHA3_NULL_S;\n }\n return value;\n};\n/**\n * Auto converts any given value into it's hex representation,\n * then converts hex to number.\n *\n * @method toNumber\n * @param {String|Number|BN} value\n * @return {Number}\n */\nvar toNumber = function (value) {\n return typeof value === 'number' ? value : hexToNumber(toHex(value));\n};\nmodule.exports = {\n BN: BN,\n isBN: isBN,\n isBigNumber: isBigNumber,\n toBN: toBN,\n isAddress: isAddress,\n isBloom: isBloom,\n isUserEthereumAddressInBloom: isUserEthereumAddressInBloom,\n isContractAddressInBloom: isContractAddressInBloom,\n isTopic: isTopic,\n isTopicInBloom: isTopicInBloom,\n isInBloom: isInBloom,\n checkAddressChecksum: checkAddressChecksum,\n utf8ToHex: utf8ToHex,\n hexToUtf8: hexToUtf8,\n hexToNumber: hexToNumber,\n hexToNumberString: hexToNumberString,\n numberToHex: numberToHex,\n toHex: toHex,\n hexToBytes: hexToBytes,\n bytesToHex: bytesToHex,\n isHex: isHex,\n isHexStrict: isHexStrict,\n stripHexPrefix: stripHexPrefix,\n leftPad: leftPad,\n rightPad: rightPad,\n toTwosComplement: toTwosComplement,\n sha3: sha3,\n sha3Raw: sha3Raw,\n toNumber: toNumber\n};\n","import assert from 'assert'\nimport { BN, rlp } from './externals'\nimport {\n privateKeyVerify,\n publicKeyCreate,\n publicKeyVerify,\n publicKeyConvert,\n} from 'ethereum-cryptography/secp256k1'\nimport { stripHexPrefix } from './internal'\nimport { KECCAK256_RLP, KECCAK256_NULL } from './constants'\nimport { zeros, bufferToHex, toBuffer } from './bytes'\nimport { keccak, keccak256, keccakFromString, rlphash } from './hash'\nimport { assertIsString, assertIsHexString, assertIsBuffer } from './helpers'\nimport { BNLike, BufferLike, bnToUnpaddedBuffer, toType, TypeOutput } from './types'\n\nexport interface AccountData {\n nonce?: BNLike\n balance?: BNLike\n stateRoot?: BufferLike\n codeHash?: BufferLike\n}\n\nexport class Account {\n nonce: BN\n balance: BN\n stateRoot: Buffer\n codeHash: Buffer\n\n static fromAccountData(accountData: AccountData) {\n const { nonce, balance, stateRoot, codeHash } = accountData\n\n return new Account(\n nonce ? new BN(toBuffer(nonce)) : undefined,\n balance ? new BN(toBuffer(balance)) : undefined,\n stateRoot ? toBuffer(stateRoot) : undefined,\n codeHash ? toBuffer(codeHash) : undefined\n )\n }\n\n public static fromRlpSerializedAccount(serialized: Buffer) {\n const values = rlp.decode(serialized)\n\n if (!Array.isArray(values)) {\n throw new Error('Invalid serialized account input. Must be array')\n }\n\n return this.fromValuesArray(values)\n }\n\n public static fromValuesArray(values: Buffer[]) {\n const [nonce, balance, stateRoot, codeHash] = values\n\n return new Account(new BN(nonce), new BN(balance), stateRoot, codeHash)\n }\n\n /**\n * This constructor assigns and validates the values.\n * Use the static factory methods to assist in creating an Account from varying data types.\n */\n constructor(\n nonce = new BN(0),\n balance = new BN(0),\n stateRoot = KECCAK256_RLP,\n codeHash = KECCAK256_NULL\n ) {\n this.nonce = nonce\n this.balance = balance\n this.stateRoot = stateRoot\n this.codeHash = codeHash\n\n this._validate()\n }\n\n private _validate() {\n if (this.nonce.lt(new BN(0))) {\n throw new Error('nonce must be greater than zero')\n }\n if (this.balance.lt(new BN(0))) {\n throw new Error('balance must be greater than zero')\n }\n if (this.stateRoot.length !== 32) {\n throw new Error('stateRoot must have a length of 32')\n }\n if (this.codeHash.length !== 32) {\n throw new Error('codeHash must have a length of 32')\n }\n }\n\n /**\n * Returns a Buffer Array of the raw Buffers for the account, in order.\n */\n raw(): Buffer[] {\n return [\n bnToUnpaddedBuffer(this.nonce),\n bnToUnpaddedBuffer(this.balance),\n this.stateRoot,\n this.codeHash,\n ]\n }\n\n /**\n * Returns the RLP serialization of the account as a `Buffer`.\n */\n serialize(): Buffer {\n return rlp.encode(this.raw())\n }\n\n /**\n * Returns a `Boolean` determining if the account is a contract.\n */\n isContract(): boolean {\n return !this.codeHash.equals(KECCAK256_NULL)\n }\n\n /**\n * Returns a `Boolean` determining if the account is empty complying to the definition of\n * account emptiness in [EIP-161](https://eips.ethereum.org/EIPS/eip-161):\n * \"An account is considered empty when it has no code and zero nonce and zero balance.\"\n */\n isEmpty(): boolean {\n return this.balance.isZero() && this.nonce.isZero() && this.codeHash.equals(KECCAK256_NULL)\n }\n}\n\n/**\n * Checks if the address is a valid. Accepts checksummed addresses too.\n */\nexport const isValidAddress = function (hexAddress: string): boolean {\n try {\n assertIsString(hexAddress)\n } catch (e: any) {\n return false\n }\n\n return /^0x[0-9a-fA-F]{40}$/.test(hexAddress)\n}\n\n/**\n * Returns a checksummed address.\n *\n * If an eip1191ChainId is provided, the chainId will be included in the checksum calculation. This\n * has the effect of checksummed addresses for one chain having invalid checksums for others.\n * For more details see [EIP-1191](https://eips.ethereum.org/EIPS/eip-1191).\n *\n * WARNING: Checksums with and without the chainId will differ and the EIP-1191 checksum is not\n * backwards compatible to the original widely adopted checksum format standard introduced in\n * [EIP-55](https://eips.ethereum.org/EIPS/eip-55), so this will break in existing applications.\n * Usage of this EIP is therefore discouraged unless you have a very targeted use case.\n */\nexport const toChecksumAddress = function (hexAddress: string, eip1191ChainId?: BNLike): string {\n assertIsHexString(hexAddress)\n const address = stripHexPrefix(hexAddress).toLowerCase()\n\n let prefix = ''\n if (eip1191ChainId) {\n const chainId = toType(eip1191ChainId, TypeOutput.BN)\n prefix = chainId.toString() + '0x'\n }\n\n const hash = keccakFromString(prefix + address).toString('hex')\n let ret = '0x'\n\n for (let i = 0; i < address.length; i++) {\n if (parseInt(hash[i], 16) >= 8) {\n ret += address[i].toUpperCase()\n } else {\n ret += address[i]\n }\n }\n\n return ret\n}\n\n/**\n * Checks if the address is a valid checksummed address.\n *\n * See toChecksumAddress' documentation for details about the eip1191ChainId parameter.\n */\nexport const isValidChecksumAddress = function (\n hexAddress: string,\n eip1191ChainId?: BNLike\n): boolean {\n return isValidAddress(hexAddress) && toChecksumAddress(hexAddress, eip1191ChainId) === hexAddress\n}\n\n/**\n * Generates an address of a newly created contract.\n * @param from The address which is creating this new address\n * @param nonce The nonce of the from account\n */\nexport const generateAddress = function (from: Buffer, nonce: Buffer): Buffer {\n assertIsBuffer(from)\n assertIsBuffer(nonce)\n const nonceBN = new BN(nonce)\n\n if (nonceBN.isZero()) {\n // in RLP we want to encode null in the case of zero nonce\n // read the RLP documentation for an answer if you dare\n return rlphash([from, null]).slice(-20)\n }\n\n // Only take the lower 160bits of the hash\n return rlphash([from, Buffer.from(nonceBN.toArray())]).slice(-20)\n}\n\n/**\n * Generates an address for a contract created using CREATE2.\n * @param from The address which is creating this new address\n * @param salt A salt\n * @param initCode The init code of the contract being created\n */\nexport const generateAddress2 = function (from: Buffer, salt: Buffer, initCode: Buffer): Buffer {\n assertIsBuffer(from)\n assertIsBuffer(salt)\n assertIsBuffer(initCode)\n\n assert(from.length === 20)\n assert(salt.length === 32)\n\n const address = keccak256(\n Buffer.concat([Buffer.from('ff', 'hex'), from, salt, keccak256(initCode)])\n )\n\n return address.slice(-20)\n}\n\n/**\n * Checks if the private key satisfies the rules of the curve secp256k1.\n */\nexport const isValidPrivate = function (privateKey: Buffer): boolean {\n return privateKeyVerify(privateKey)\n}\n\n/**\n * Checks if the public key satisfies the rules of the curve secp256k1\n * and the requirements of Ethereum.\n * @param publicKey The two points of an uncompressed key, unless sanitize is enabled\n * @param sanitize Accept public keys in other formats\n */\nexport const isValidPublic = function (publicKey: Buffer, sanitize: boolean = false): boolean {\n assertIsBuffer(publicKey)\n if (publicKey.length === 64) {\n // Convert to SEC1 for secp256k1\n return publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey]))\n }\n\n if (!sanitize) {\n return false\n }\n\n return publicKeyVerify(publicKey)\n}\n\n/**\n * Returns the ethereum address of a given public key.\n * Accepts \"Ethereum public keys\" and SEC1 encoded keys.\n * @param pubKey The two points of an uncompressed key, unless sanitize is enabled\n * @param sanitize Accept public keys in other formats\n */\nexport const pubToAddress = function (pubKey: Buffer, sanitize: boolean = false): Buffer {\n assertIsBuffer(pubKey)\n if (sanitize && pubKey.length !== 64) {\n pubKey = Buffer.from(publicKeyConvert(pubKey, false).slice(1))\n }\n assert(pubKey.length === 64)\n // Only take the lower 160bits of the hash\n return keccak(pubKey).slice(-20)\n}\nexport const publicToAddress = pubToAddress\n\n/**\n * Returns the ethereum public key of a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\nexport const privateToPublic = function (privateKey: Buffer): Buffer {\n assertIsBuffer(privateKey)\n // skip the type flag and use the X, Y points\n return Buffer.from(publicKeyCreate(privateKey, false)).slice(1)\n}\n\n/**\n * Returns the ethereum address of a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\nexport const privateToAddress = function (privateKey: Buffer): Buffer {\n return publicToAddress(privateToPublic(privateKey))\n}\n\n/**\n * Converts a public key to the Ethereum format.\n */\nexport const importPublic = function (publicKey: Buffer): Buffer {\n assertIsBuffer(publicKey)\n if (publicKey.length !== 64) {\n publicKey = Buffer.from(publicKeyConvert(publicKey, false).slice(1))\n }\n return publicKey\n}\n\n/**\n * Returns the zero address.\n */\nexport const zeroAddress = function (): string {\n const addressLength = 20\n const addr = zeros(addressLength)\n return bufferToHex(addr)\n}\n\n/**\n * Checks if a given address is the zero address.\n */\nexport const isZeroAddress = function (hexAddress: string): boolean {\n try {\n assertIsString(hexAddress)\n } catch (e: any) {\n return false\n }\n\n const zeroAddr = zeroAddress()\n return zeroAddr === hexAddress\n}\n","import assert from 'assert'\nimport { BN } from './externals'\nimport { toBuffer, zeros } from './bytes'\nimport {\n isValidAddress,\n pubToAddress,\n privateToAddress,\n generateAddress,\n generateAddress2,\n} from './account'\n\nexport class Address {\n public readonly buf: Buffer\n\n constructor(buf: Buffer) {\n assert(buf.length === 20, 'Invalid address length')\n this.buf = buf\n }\n\n /**\n * Returns the zero address.\n */\n static zero(): Address {\n return new Address(zeros(20))\n }\n\n /**\n * Returns an Address object from a hex-encoded string.\n * @param str - Hex-encoded address\n */\n static fromString(str: string): Address {\n assert(isValidAddress(str), 'Invalid address')\n return new Address(toBuffer(str))\n }\n\n /**\n * Returns an address for a given public key.\n * @param pubKey The two points of an uncompressed key\n */\n static fromPublicKey(pubKey: Buffer): Address {\n assert(Buffer.isBuffer(pubKey), 'Public key should be Buffer')\n const buf = pubToAddress(pubKey)\n return new Address(buf)\n }\n\n /**\n * Returns an address for a given private key.\n * @param privateKey A private key must be 256 bits wide\n */\n static fromPrivateKey(privateKey: Buffer): Address {\n assert(Buffer.isBuffer(privateKey), 'Private key should be Buffer')\n const buf = privateToAddress(privateKey)\n return new Address(buf)\n }\n\n /**\n * Generates an address for a newly created contract.\n * @param from The address which is creating this new address\n * @param nonce The nonce of the from account\n */\n static generate(from: Address, nonce: BN): Address {\n assert(BN.isBN(nonce))\n return new Address(generateAddress(from.buf, nonce.toArrayLike(Buffer)))\n }\n\n /**\n * Generates an address for a contract created using CREATE2.\n * @param from The address which is creating this new address\n * @param salt A salt\n * @param initCode The init code of the contract being created\n */\n static generate2(from: Address, salt: Buffer, initCode: Buffer): Address {\n assert(Buffer.isBuffer(salt))\n assert(Buffer.isBuffer(initCode))\n return new Address(generateAddress2(from.buf, salt, initCode))\n }\n\n /**\n * Is address equal to another.\n */\n equals(address: Address): boolean {\n return this.buf.equals(address.buf)\n }\n\n /**\n * Is address zero.\n */\n isZero(): boolean {\n return this.equals(Address.zero())\n }\n\n /**\n * True if address is in the address range defined\n * by EIP-1352\n */\n isPrecompileOrSystemAddress(): boolean {\n const addressBN = new BN(this.buf)\n const rangeMin = new BN(0)\n const rangeMax = new BN('ffff', 'hex')\n\n return addressBN.gte(rangeMin) && addressBN.lte(rangeMax)\n }\n\n /**\n * Returns hex encoding of address.\n */\n toString(): string {\n return '0x' + this.buf.toString('hex')\n }\n\n /**\n * Returns Buffer representation of address.\n */\n toBuffer(): Buffer {\n return Buffer.from(this.buf)\n }\n}\n","import { BN } from './externals'\nimport { stripHexPrefix, padToEven, isHexString, isHexPrefixed } from './internal'\nimport {\n PrefixedHexString,\n TransformableToArray,\n TransformableToBuffer,\n NestedBufferArray,\n NestedUint8Array,\n} from './types'\nimport { assertIsBuffer, assertIsArray, assertIsHexString } from './helpers'\n\n/**\n * Converts a `Number` into a hex `String`\n * @param {Number} i\n * @return {String}\n */\nexport const intToHex = function (i: number) {\n if (!Number.isSafeInteger(i) || i < 0) {\n throw new Error(`Received an invalid integer type: ${i}`)\n }\n return `0x${i.toString(16)}`\n}\n\n/**\n * Converts an `Number` to a `Buffer`\n * @param {Number} i\n * @return {Buffer}\n */\nexport const intToBuffer = function (i: number) {\n const hex = intToHex(i)\n return Buffer.from(padToEven(hex.slice(2)), 'hex')\n}\n\n/**\n * Returns a buffer filled with 0s.\n * @param bytes the number of bytes the buffer should be\n */\nexport const zeros = function (bytes: number): Buffer {\n return Buffer.allocUnsafe(bytes).fill(0)\n}\n\n/**\n * Pads a `Buffer` with zeros till it has `length` bytes.\n * Truncates the beginning or end of input if its length exceeds `length`.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @param right whether to start padding form the left or right\n * @return (Buffer)\n */\nconst setLength = function (msg: Buffer, length: number, right: boolean) {\n const buf = zeros(length)\n if (right) {\n if (msg.length < length) {\n msg.copy(buf)\n return buf\n }\n return msg.slice(0, length)\n } else {\n if (msg.length < length) {\n msg.copy(buf, length - msg.length)\n return buf\n }\n return msg.slice(-length)\n }\n}\n\n/**\n * Left Pads a `Buffer` with leading zeros till it has `length` bytes.\n * Or it truncates the beginning if it exceeds.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @return (Buffer)\n */\nexport const setLengthLeft = function (msg: Buffer, length: number) {\n assertIsBuffer(msg)\n return setLength(msg, length, false)\n}\n\n/**\n * Right Pads a `Buffer` with trailing zeros till it has `length` bytes.\n * it truncates the end if it exceeds.\n * @param msg the value to pad (Buffer)\n * @param length the number of bytes the output should be\n * @return (Buffer)\n */\nexport const setLengthRight = function (msg: Buffer, length: number) {\n assertIsBuffer(msg)\n return setLength(msg, length, true)\n}\n\n/**\n * Trims leading zeros from a `Buffer`, `String` or `Number[]`.\n * @param a (Buffer|Array|String)\n * @return (Buffer|Array|String)\n */\nconst stripZeros = function (a: any): Buffer | number[] | string {\n let first = a[0]\n while (a.length > 0 && first.toString() === '0') {\n a = a.slice(1)\n first = a[0]\n }\n return a\n}\n\n/**\n * Trims leading zeros from a `Buffer`.\n * @param a (Buffer)\n * @return (Buffer)\n */\nexport const unpadBuffer = function (a: Buffer): Buffer {\n assertIsBuffer(a)\n return stripZeros(a) as Buffer\n}\n\n/**\n * Trims leading zeros from an `Array` (of numbers).\n * @param a (number[])\n * @return (number[])\n */\nexport const unpadArray = function (a: number[]): number[] {\n assertIsArray(a)\n return stripZeros(a) as number[]\n}\n\n/**\n * Trims leading zeros from a hex-prefixed `String`.\n * @param a (String)\n * @return (String)\n */\nexport const unpadHexString = function (a: string): string {\n assertIsHexString(a)\n a = stripHexPrefix(a)\n return stripZeros(a) as string\n}\n\nexport type ToBufferInputTypes =\n | PrefixedHexString\n | number\n | BN\n | Buffer\n | Uint8Array\n | number[]\n | TransformableToArray\n | TransformableToBuffer\n | null\n | undefined\n\n/**\n * Attempts to turn a value into a `Buffer`.\n * Inputs supported: `Buffer`, `String` (hex-prefixed), `Number`, null/undefined, `BN` and other objects\n * with a `toArray()` or `toBuffer()` method.\n * @param v the value\n */\nexport const toBuffer = function (v: ToBufferInputTypes): Buffer {\n if (v === null || v === undefined) {\n return Buffer.allocUnsafe(0)\n }\n\n if (Buffer.isBuffer(v)) {\n return Buffer.from(v)\n }\n\n if (Array.isArray(v) || v instanceof Uint8Array) {\n return Buffer.from(v as Uint8Array)\n }\n\n if (typeof v === 'string') {\n if (!isHexString(v)) {\n throw new Error(\n `Cannot convert string to buffer. toBuffer only supports 0x-prefixed hex strings and this string was given: ${v}`\n )\n }\n return Buffer.from(padToEven(stripHexPrefix(v)), 'hex')\n }\n\n if (typeof v === 'number') {\n return intToBuffer(v)\n }\n\n if (BN.isBN(v)) {\n if (v.isNeg()) {\n throw new Error(`Cannot convert negative BN to buffer. Given: ${v}`)\n }\n return v.toArrayLike(Buffer)\n }\n\n if (v.toArray) {\n // converts a BN to a Buffer\n return Buffer.from(v.toArray())\n }\n\n if (v.toBuffer) {\n return Buffer.from(v.toBuffer())\n }\n\n throw new Error('invalid type')\n}\n\n/**\n * Converts a `Buffer` to a `Number`.\n * @param buf `Buffer` object to convert\n * @throws If the input number exceeds 53 bits.\n */\nexport const bufferToInt = function (buf: Buffer): number {\n return new BN(toBuffer(buf)).toNumber()\n}\n\n/**\n * Converts a `Buffer` into a `0x`-prefixed hex `String`.\n * @param buf `Buffer` object to convert\n */\nexport const bufferToHex = function (buf: Buffer): string {\n buf = toBuffer(buf)\n return '0x' + buf.toString('hex')\n}\n\n/**\n * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.\n * @param num Signed integer value\n */\nexport const fromSigned = function (num: Buffer): BN {\n return new BN(num).fromTwos(256)\n}\n\n/**\n * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.\n * @param num\n */\nexport const toUnsigned = function (num: BN): Buffer {\n return Buffer.from(num.toTwos(256).toArray())\n}\n\n/**\n * Adds \"0x\" to a given `String` if it does not already start with \"0x\".\n */\nexport const addHexPrefix = function (str: string): string {\n if (typeof str !== 'string') {\n return str\n }\n\n return isHexPrefixed(str) ? str : '0x' + str\n}\n\n/**\n * Returns the utf8 string representation from a hex string.\n *\n * Examples:\n *\n * Input 1: '657468657265756d000000000000000000000000000000000000000000000000'\n * Input 2: '657468657265756d'\n * Input 3: '000000000000000000000000000000000000000000000000657468657265756d'\n *\n * Output (all 3 input variants): 'ethereum'\n *\n * Note that this method is not intended to be used with hex strings\n * representing quantities in both big endian or little endian notation.\n *\n * @param string Hex string, should be `0x` prefixed\n * @return Utf8 string\n */\nexport const toUtf8 = function (hex: string): string {\n const zerosRegexp = /^(00)+|(00)+$/g\n hex = stripHexPrefix(hex)\n if (hex.length % 2 !== 0) {\n throw new Error('Invalid non-even hex string input for toUtf8() provided')\n }\n const bufferVal = Buffer.from(hex.replace(zerosRegexp, ''), 'hex')\n\n return bufferVal.toString('utf8')\n}\n\n/**\n * Converts a `Buffer` or `Array` to JSON.\n * @param ba (Buffer|Array)\n * @return (Array|String|null)\n */\nexport const baToJSON = function (ba: any): any {\n if (Buffer.isBuffer(ba)) {\n return `0x${ba.toString('hex')}`\n } else if (ba instanceof Array) {\n const array = []\n for (let i = 0; i < ba.length; i++) {\n array.push(baToJSON(ba[i]))\n }\n return array\n }\n}\n\n/**\n * Checks provided Buffers for leading zeroes and throws if found.\n *\n * Examples:\n *\n * Valid values: 0x1, 0x, 0x01, 0x1234\n * Invalid values: 0x0, 0x00, 0x001, 0x0001\n *\n * Note: This method is useful for validating that RLP encoded integers comply with the rule that all\n * integer values encoded to RLP must be in the most compact form and contain no leading zero bytes\n * @param values An object containing string keys and Buffer values\n * @throws if any provided value is found to have leading zero bytes\n */\nexport const validateNoLeadingZeroes = function (values: { [key: string]: Buffer | undefined }) {\n for (const [k, v] of Object.entries(values)) {\n if (v !== undefined && v.length > 0 && v[0] === 0) {\n throw new Error(`${k} cannot have leading zeroes, received: ${v.toString('hex')}`)\n }\n }\n}\n\n/**\n * Converts a {@link Uint8Array} or {@link NestedUint8Array} to {@link Buffer} or {@link NestedBufferArray}\n */\nexport function arrToBufArr(arr: Uint8Array): Buffer\nexport function arrToBufArr(arr: NestedUint8Array): NestedBufferArray\nexport function arrToBufArr(arr: Uint8Array | NestedUint8Array): Buffer | NestedBufferArray\nexport function arrToBufArr(arr: Uint8Array | NestedUint8Array): Buffer | NestedBufferArray {\n if (!Array.isArray(arr)) {\n return Buffer.from(arr)\n }\n return arr.map((a) => arrToBufArr(a))\n}\n\n/**\n * Converts a {@link Buffer} or {@link NestedBufferArray} to {@link Uint8Array} or {@link NestedUint8Array}\n */\nexport function bufArrToArr(arr: Buffer): Uint8Array\nexport function bufArrToArr(arr: NestedBufferArray): NestedUint8Array\nexport function bufArrToArr(arr: Buffer | NestedBufferArray): Uint8Array | NestedUint8Array\nexport function bufArrToArr(arr: Buffer | NestedBufferArray): Uint8Array | NestedUint8Array {\n if (!Array.isArray(arr)) {\n return Uint8Array.from(arr ?? [])\n }\n return arr.map((a) => bufArrToArr(a))\n}\n","import { Buffer } from 'buffer'\nimport { BN } from './externals'\n\n/**\n * 2^64-1\n */\nexport const MAX_UINT64 = new BN('ffffffffffffffff', 16)\n\n/**\n * The max integer that the evm can handle (2^256-1)\n */\nexport const MAX_INTEGER = new BN(\n 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',\n 16\n)\n\n/**\n * 2^256\n */\nexport const TWO_POW256 = new BN(\n '10000000000000000000000000000000000000000000000000000000000000000',\n 16\n)\n\n/**\n * Keccak-256 hash of null\n */\nexport const KECCAK256_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'\n\n/**\n * Keccak-256 hash of null\n */\nexport const KECCAK256_NULL = Buffer.from(KECCAK256_NULL_S, 'hex')\n\n/**\n * Keccak-256 of an RLP of an empty array\n */\nexport const KECCAK256_RLP_ARRAY_S =\n '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'\n\n/**\n * Keccak-256 of an RLP of an empty array\n */\nexport const KECCAK256_RLP_ARRAY = Buffer.from(KECCAK256_RLP_ARRAY_S, 'hex')\n\n/**\n * Keccak-256 hash of the RLP of null\n */\nexport const KECCAK256_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'\n\n/**\n * Keccak-256 hash of the RLP of null\n */\nexport const KECCAK256_RLP = Buffer.from(KECCAK256_RLP_S, 'hex')\n","/**\n * Re-exports commonly used modules:\n * * Exports [`BN`](https://github.com/indutny/bn.js), [`rlp`](https://github.com/ethereumjs/rlp).\n * @packageDocumentation\n */\n\nimport BN from 'bn.js'\nimport * as rlp from 'rlp'\n\n/**\n * [`BN`](https://github.com/indutny/bn.js)\n */\nexport { BN }\n\n/**\n * [`rlp`](https://github.com/ethereumjs/rlp)\n */\nexport { rlp }\n","import { keccak224, keccak384, keccak256 as k256, keccak512 } from 'ethereum-cryptography/keccak'\nconst createHash = require('create-hash')\nimport { rlp } from './externals'\nimport { toBuffer, setLengthLeft } from './bytes'\nimport { assertIsString, assertIsBuffer, assertIsArray, assertIsHexString } from './helpers'\n\n/**\n * Creates Keccak hash of a Buffer input\n * @param a The input data (Buffer)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccak = function (a: Buffer, bits: number = 256): Buffer {\n assertIsBuffer(a)\n switch (bits) {\n case 224: {\n return keccak224(a)\n }\n case 256: {\n return k256(a)\n }\n case 384: {\n return keccak384(a)\n }\n case 512: {\n return keccak512(a)\n }\n default: {\n throw new Error(`Invald algorithm: keccak${bits}`)\n }\n }\n}\n\n/**\n * Creates Keccak-256 hash of the input, alias for keccak(a, 256).\n * @param a The input data (Buffer)\n */\nexport const keccak256 = function (a: Buffer): Buffer {\n return keccak(a)\n}\n\n/**\n * Creates Keccak hash of a utf-8 string input\n * @param a The input data (String)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromString = function (a: string, bits: number = 256) {\n assertIsString(a)\n const buf = Buffer.from(a, 'utf8')\n return keccak(buf, bits)\n}\n\n/**\n * Creates Keccak hash of an 0x-prefixed string input\n * @param a The input data (String)\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromHexString = function (a: string, bits: number = 256) {\n assertIsHexString(a)\n return keccak(toBuffer(a), bits)\n}\n\n/**\n * Creates Keccak hash of a number array input\n * @param a The input data (number[])\n * @param bits (number = 256) The Keccak width\n */\nexport const keccakFromArray = function (a: number[], bits: number = 256) {\n assertIsArray(a)\n return keccak(toBuffer(a), bits)\n}\n\n/**\n * Creates SHA256 hash of an input.\n * @param a The input data (Buffer|Array|String)\n */\nconst _sha256 = function (a: any): Buffer {\n a = toBuffer(a)\n return createHash('sha256').update(a).digest()\n}\n\n/**\n * Creates SHA256 hash of a Buffer input.\n * @param a The input data (Buffer)\n */\nexport const sha256 = function (a: Buffer): Buffer {\n assertIsBuffer(a)\n return _sha256(a)\n}\n\n/**\n * Creates SHA256 hash of a string input.\n * @param a The input data (string)\n */\nexport const sha256FromString = function (a: string): Buffer {\n assertIsString(a)\n return _sha256(a)\n}\n\n/**\n * Creates SHA256 hash of a number[] input.\n * @param a The input data (number[])\n */\nexport const sha256FromArray = function (a: number[]): Buffer {\n assertIsArray(a)\n return _sha256(a)\n}\n\n/**\n * Creates RIPEMD160 hash of the input.\n * @param a The input data (Buffer|Array|String|Number)\n * @param padded Whether it should be padded to 256 bits or not\n */\nconst _ripemd160 = function (a: any, padded: boolean): Buffer {\n a = toBuffer(a)\n const hash = createHash('rmd160').update(a).digest()\n if (padded === true) {\n return setLengthLeft(hash, 32)\n } else {\n return hash\n }\n}\n\n/**\n * Creates RIPEMD160 hash of a Buffer input.\n * @param a The input data (Buffer)\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160 = function (a: Buffer, padded: boolean): Buffer {\n assertIsBuffer(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates RIPEMD160 hash of a string input.\n * @param a The input data (String)\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160FromString = function (a: string, padded: boolean): Buffer {\n assertIsString(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates RIPEMD160 hash of a number[] input.\n * @param a The input data (number[])\n * @param padded Whether it should be padded to 256 bits or not\n */\nexport const ripemd160FromArray = function (a: number[], padded: boolean): Buffer {\n assertIsArray(a)\n return _ripemd160(a, padded)\n}\n\n/**\n * Creates SHA-3 hash of the RLP encoded version of the input.\n * @param a The input data\n */\nexport const rlphash = function (a: rlp.Input): Buffer {\n return keccak(rlp.encode(a))\n}\n","import { isHexString } from './internal'\n\n/**\n * Throws if a string is not hex prefixed\n * @param {string} input string to check hex prefix of\n */\nexport const assertIsHexString = function (input: string): void {\n if (!isHexString(input)) {\n const msg = `This method only supports 0x-prefixed hex strings but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not a buffer\n * @param {Buffer} input value to check\n */\nexport const assertIsBuffer = function (input: Buffer): void {\n if (!Buffer.isBuffer(input)) {\n const msg = `This method only supports Buffer but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not an array\n * @param {number[]} input value to check\n */\nexport const assertIsArray = function (input: number[]): void {\n if (!Array.isArray(input)) {\n const msg = `This method only supports number arrays but input was: ${input}`\n throw new Error(msg)\n }\n}\n\n/**\n * Throws if input is not a string\n * @param {string} input value to check\n */\nexport const assertIsString = function (input: string): void {\n if (typeof input !== 'string') {\n const msg = `This method only supports strings but input was: ${input}`\n throw new Error(msg)\n }\n}\n","/**\n * Constants\n */\nexport * from './constants'\n\n/**\n * Account class and helper functions\n */\nexport * from './account'\n\n/**\n * Address type\n */\nexport * from './address'\n\n/**\n * Hash functions\n */\nexport * from './hash'\n\n/**\n * ECDSA signature\n */\nexport * from './signature'\n\n/**\n * Utilities for manipulating Buffers, byte arrays, etc.\n */\nexport * from './bytes'\n\n/**\n * Function for definining properties on an object\n */\nexport * from './object'\n\n/**\n * External exports (BN, rlp)\n */\nexport * from './externals'\n\n/**\n * Helpful TypeScript types\n */\nexport * from './types'\n\n/**\n * Export ethjs-util methods\n */\nexport {\n isHexPrefixed,\n stripHexPrefix,\n padToEven,\n getBinarySize,\n arrayContainsArray,\n toAscii,\n fromUtf8,\n fromAscii,\n getKeys,\n isHexString,\n} from './internal'\n","/*\nThe MIT License\n\nCopyright (c) 2016 Nick Dodson. nickdodson.com\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE\n */\n\n/**\n * Returns a `Boolean` on whether or not the a `String` starts with '0x'\n * @param str the string input value\n * @return a boolean if it is or is not hex prefixed\n * @throws if the str input is not a string\n */\nexport function isHexPrefixed(str: string): boolean {\n if (typeof str !== 'string') {\n throw new Error(`[isHexPrefixed] input must be type 'string', received type ${typeof str}`)\n }\n\n return str[0] === '0' && str[1] === 'x'\n}\n\n/**\n * Removes '0x' from a given `String` if present\n * @param str the string value\n * @returns the string without 0x prefix\n */\nexport const stripHexPrefix = (str: string): string => {\n if (typeof str !== 'string')\n throw new Error(`[stripHexPrefix] input must be type 'string', received ${typeof str}`)\n\n return isHexPrefixed(str) ? str.slice(2) : str\n}\n\n/**\n * Pads a `String` to have an even length\n * @param value\n * @return output\n */\nexport function padToEven(value: string): string {\n let a = value\n\n if (typeof a !== 'string') {\n throw new Error(`[padToEven] value must be type 'string', received ${typeof a}`)\n }\n\n if (a.length % 2) a = `0${a}`\n\n return a\n}\n\n/**\n * Get the binary size of a string\n * @param str\n * @returns the number of bytes contained within the string\n */\nexport function getBinarySize(str: string) {\n if (typeof str !== 'string') {\n throw new Error(`[getBinarySize] method requires input type 'string', recieved ${typeof str}`)\n }\n\n return Buffer.byteLength(str, 'utf8')\n}\n\n/**\n * Returns TRUE if the first specified array contains all elements\n * from the second one. FALSE otherwise.\n *\n * @param superset\n * @param subset\n *\n */\nexport function arrayContainsArray(\n superset: unknown[],\n subset: unknown[],\n some?: boolean\n): boolean {\n if (Array.isArray(superset) !== true) {\n throw new Error(\n `[arrayContainsArray] method requires input 'superset' to be an array, got type '${typeof superset}'`\n )\n }\n if (Array.isArray(subset) !== true) {\n throw new Error(\n `[arrayContainsArray] method requires input 'subset' to be an array, got type '${typeof subset}'`\n )\n }\n\n return subset[some ? 'some' : 'every']((value) => superset.indexOf(value) >= 0)\n}\n\n/**\n * Should be called to get ascii from its hex representation\n *\n * @param string in hex\n * @returns ascii string representation of hex value\n */\nexport function toAscii(hex: string): string {\n let str = ''\n let i = 0\n const l = hex.length\n\n if (hex.substring(0, 2) === '0x') i = 2\n\n for (; i < l; i += 2) {\n const code = parseInt(hex.substr(i, 2), 16)\n str += String.fromCharCode(code)\n }\n\n return str\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of utf8 string\n *\n * @param string\n * @param optional padding\n * @returns hex representation of input string\n */\nexport function fromUtf8(stringValue: string) {\n const str = Buffer.from(stringValue, 'utf8')\n\n return `0x${padToEven(str.toString('hex')).replace(/^0+|0+$/g, '')}`\n}\n\n/**\n * Should be called to get hex representation (prefixed by 0x) of ascii string\n *\n * @param string\n * @param optional padding\n * @returns hex representation of input string\n */\nexport function fromAscii(stringValue: string) {\n let hex = ''\n for (let i = 0; i < stringValue.length; i++) {\n const code = stringValue.charCodeAt(i)\n const n = code.toString(16)\n hex += n.length < 2 ? `0${n}` : n\n }\n\n return `0x${hex}`\n}\n\n/**\n * Returns the keys from an array of objects.\n * @example\n * ```js\n * getKeys([{a: '1', b: '2'}, {a: '3', b: '4'}], 'a') => ['1', '3']\n *````\n * @param params\n * @param key\n * @param allowEmpty\n * @returns output just a simple array of output keys\n */\nexport function getKeys(params: Record[], key: string, allowEmpty?: boolean) {\n if (!Array.isArray(params)) {\n throw new Error(`[getKeys] method expects input 'params' to be an array, got ${typeof params}`)\n }\n if (typeof key !== 'string') {\n throw new Error(\n `[getKeys] method expects input 'key' to be type 'string', got ${typeof params}`\n )\n }\n\n const result = []\n\n for (let i = 0; i < params.length; i++) {\n let value = params[i][key]\n if (allowEmpty && !value) {\n value = ''\n } else if (typeof value !== 'string') {\n throw new Error(`invalid abi - expected type 'string', received ${typeof value}`)\n }\n result.push(value)\n }\n\n return result\n}\n\n/**\n * Is the string a hex string.\n *\n * @param value\n * @param length\n * @returns output the string is a hex string\n */\nexport function isHexString(value: string, length?: number): boolean {\n if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) return false\n\n if (length && value.length !== 2 + 2 * length) return false\n\n return true\n}\n","import assert from 'assert'\nimport { stripHexPrefix } from './internal'\nimport { rlp } from './externals'\nimport { toBuffer, baToJSON, unpadBuffer } from './bytes'\n\n/**\n * Defines properties on a `Object`. It make the assumption that underlying data is binary.\n * @param self the `Object` to define properties on\n * @param fields an array fields to define. Fields can contain:\n * * `name` - the name of the properties\n * * `length` - the number of bytes the field can have\n * * `allowLess` - if the field can be less than the length\n * * `allowEmpty`\n * @param data data to be validated against the definitions\n * @deprecated\n */\nexport const defineProperties = function (self: any, fields: any, data?: any) {\n self.raw = []\n self._fields = []\n\n // attach the `toJSON`\n self.toJSON = function (label: boolean = false) {\n if (label) {\n type Dict = { [key: string]: string }\n const obj: Dict = {}\n self._fields.forEach((field: string) => {\n obj[field] = `0x${self[field].toString('hex')}`\n })\n return obj\n }\n return baToJSON(self.raw)\n }\n\n self.serialize = function serialize() {\n return rlp.encode(self.raw)\n }\n\n fields.forEach((field: any, i: number) => {\n self._fields.push(field.name)\n function getter() {\n return self.raw[i]\n }\n function setter(v: any) {\n v = toBuffer(v)\n\n if (v.toString('hex') === '00' && !field.allowZero) {\n v = Buffer.allocUnsafe(0)\n }\n\n if (field.allowLess && field.length) {\n v = unpadBuffer(v)\n assert(\n field.length >= v.length,\n `The field ${field.name} must not have more ${field.length} bytes`\n )\n } else if (!(field.allowZero && v.length === 0) && field.length) {\n assert(\n field.length === v.length,\n `The field ${field.name} must have byte length of ${field.length}`\n )\n }\n\n self.raw[i] = v\n }\n\n Object.defineProperty(self, field.name, {\n enumerable: true,\n configurable: true,\n get: getter,\n set: setter,\n })\n\n if (field.default) {\n self[field.name] = field.default\n }\n\n // attach alias\n if (field.alias) {\n Object.defineProperty(self, field.alias, {\n enumerable: false,\n configurable: true,\n set: setter,\n get: getter,\n })\n }\n })\n\n // if the constuctor is passed data\n if (data) {\n if (typeof data === 'string') {\n data = Buffer.from(stripHexPrefix(data), 'hex')\n }\n\n if (Buffer.isBuffer(data)) {\n data = rlp.decode(data)\n }\n\n if (Array.isArray(data)) {\n if (data.length > self._fields.length) {\n throw new Error('wrong number of fields in data')\n }\n\n // make sure all the items are buffers\n data.forEach((d, i) => {\n self[self._fields[i]] = toBuffer(d)\n })\n } else if (typeof data === 'object') {\n const keys = Object.keys(data)\n fields.forEach((field: any) => {\n if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]\n if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]\n })\n } else {\n throw new Error('invalid data')\n }\n }\n}\n","import { ecdsaSign, ecdsaRecover, publicKeyConvert } from 'ethereum-cryptography/secp256k1'\nimport { BN } from './externals'\nimport { toBuffer, setLengthLeft, bufferToHex, bufferToInt } from './bytes'\nimport { keccak } from './hash'\nimport { assertIsBuffer } from './helpers'\nimport { BNLike, toType, TypeOutput } from './types'\n\nexport interface ECDSASignature {\n v: number\n r: Buffer\n s: Buffer\n}\n\nexport interface ECDSASignatureBuffer {\n v: Buffer\n r: Buffer\n s: Buffer\n}\n\n/**\n * Returns the ECDSA signature of a message hash.\n */\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId?: number): ECDSASignature\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId: BNLike): ECDSASignatureBuffer\nexport function ecsign(msgHash: Buffer, privateKey: Buffer, chainId: any): any {\n const { signature, recid: recovery } = ecdsaSign(msgHash, privateKey)\n\n const r = Buffer.from(signature.slice(0, 32))\n const s = Buffer.from(signature.slice(32, 64))\n\n if (!chainId || typeof chainId === 'number') {\n // return legacy type ECDSASignature (deprecated in favor of ECDSASignatureBuffer to handle large chainIds)\n if (chainId && !Number.isSafeInteger(chainId)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)'\n )\n }\n const v = chainId ? recovery + (chainId * 2 + 35) : recovery + 27\n return { r, s, v }\n }\n\n const chainIdBN = toType(chainId as BNLike, TypeOutput.BN)\n const v = chainIdBN.muln(2).addn(35).addn(recovery).toArrayLike(Buffer)\n return { r, s, v }\n}\n\nfunction calculateSigRecovery(v: BNLike, chainId?: BNLike): BN {\n const vBN = toType(v, TypeOutput.BN)\n if (!chainId) {\n return vBN.subn(27)\n }\n const chainIdBN = toType(chainId, TypeOutput.BN)\n return vBN.sub(chainIdBN.muln(2).addn(35))\n}\n\nfunction isValidSigRecovery(recovery: number | BN): boolean {\n const rec = new BN(recovery)\n return rec.eqn(0) || rec.eqn(1)\n}\n\n/**\n * ECDSA public key recovery from signature.\n * @returns Recovered public key\n */\nexport const ecrecover = function (\n msgHash: Buffer,\n v: BNLike,\n r: Buffer,\n s: Buffer,\n chainId?: BNLike\n): Buffer {\n const signature = Buffer.concat([setLengthLeft(r, 32), setLengthLeft(s, 32)], 64)\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n const senderPubKey = ecdsaRecover(signature, recovery.toNumber(), msgHash)\n return Buffer.from(publicKeyConvert(senderPubKey, false).slice(1))\n}\n\n/**\n * Convert signature parameters into the format of `eth_sign` RPC method.\n * @returns Signature\n */\nexport const toRpcSig = function (v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike): string {\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n\n // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin\n return bufferToHex(Buffer.concat([setLengthLeft(r, 32), setLengthLeft(s, 32), toBuffer(v)]))\n}\n\n/**\n * Convert signature parameters into the format of Compact Signature Representation (EIP-2098).\n * @returns Signature\n */\nexport const toCompactSig = function (v: BNLike, r: Buffer, s: Buffer, chainId?: BNLike): string {\n const recovery = calculateSigRecovery(v, chainId)\n if (!isValidSigRecovery(recovery)) {\n throw new Error('Invalid signature v value')\n }\n\n const vn = toType(v, TypeOutput.Number)\n let ss = s\n if ((vn > 28 && vn % 2 === 1) || vn === 1 || vn === 28) {\n ss = Buffer.from(s)\n ss[0] |= 0x80\n }\n\n return bufferToHex(Buffer.concat([setLengthLeft(r, 32), setLengthLeft(ss, 32)]))\n}\n\n/**\n * Convert signature format of the `eth_sign` RPC method to signature parameters\n * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053\n */\nexport const fromRpcSig = function (sig: string): ECDSASignature {\n const buf: Buffer = toBuffer(sig)\n\n let r: Buffer\n let s: Buffer\n let v: number\n if (buf.length >= 65) {\n r = buf.slice(0, 32)\n s = buf.slice(32, 64)\n v = bufferToInt(buf.slice(64))\n } else if (buf.length === 64) {\n // Compact Signature Representation (https://eips.ethereum.org/EIPS/eip-2098)\n r = buf.slice(0, 32)\n s = buf.slice(32, 64)\n v = bufferToInt(buf.slice(32, 33)) >> 7\n s[0] &= 0x7f\n } else {\n throw new Error('Invalid signature length')\n }\n\n // support both versions of `eth_sign` responses\n if (v < 27) {\n v += 27\n }\n\n return {\n v,\n r,\n s,\n }\n}\n\n/**\n * Validate a ECDSA signature.\n * @param homesteadOrLater Indicates whether this is being used on either the homestead hardfork or a later one\n */\nexport const isValidSignature = function (\n v: BNLike,\n r: Buffer,\n s: Buffer,\n homesteadOrLater: boolean = true,\n chainId?: BNLike\n): boolean {\n const SECP256K1_N_DIV_2 = new BN(\n '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0',\n 16\n )\n const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)\n\n if (r.length !== 32 || s.length !== 32) {\n return false\n }\n\n if (!isValidSigRecovery(calculateSigRecovery(v, chainId))) {\n return false\n }\n\n const rBN = new BN(r)\n const sBN = new BN(s)\n\n if (rBN.isZero() || rBN.gt(SECP256K1_N) || sBN.isZero() || sBN.gt(SECP256K1_N)) {\n return false\n }\n\n if (homesteadOrLater && sBN.cmp(SECP256K1_N_DIV_2) === 1) {\n return false\n }\n\n return true\n}\n\n/**\n * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.\n * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`\n * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key\n * used to produce the signature.\n */\nexport const hashPersonalMessage = function (message: Buffer): Buffer {\n assertIsBuffer(message)\n const prefix = Buffer.from(`\\u0019Ethereum Signed Message:\\n${message.length}`, 'utf-8')\n return keccak(Buffer.concat([prefix, message]))\n}\n","import { BN } from './externals'\nimport { isHexString } from './internal'\nimport { Address } from './address'\nimport { unpadBuffer, toBuffer, ToBufferInputTypes } from './bytes'\n\n/*\n * A type that represents a BNLike input that can be converted to a BN.\n */\nexport type BNLike = BN | PrefixedHexString | number | Buffer\n\n/*\n * A type that represents a BufferLike input that can be converted to a Buffer.\n */\nexport type BufferLike =\n | Buffer\n | Uint8Array\n | number[]\n | number\n | BN\n | TransformableToBuffer\n | PrefixedHexString\n\n/*\n * A type that represents a `0x`-prefixed hex string.\n */\nexport type PrefixedHexString = string\n\n/**\n * A type that represents an Address-like value.\n * To convert to address, use `new Address(toBuffer(value))`\n */\nexport type AddressLike = Address | Buffer | PrefixedHexString\n\n/*\n * A type that represents an object that has a `toArray()` method.\n */\nexport interface TransformableToArray {\n toArray(): Uint8Array\n toBuffer?(): Buffer\n}\n\n/*\n * A type that represents an object that has a `toBuffer()` method.\n */\nexport interface TransformableToBuffer {\n toBuffer(): Buffer\n toArray?(): Uint8Array\n}\n\nexport type NestedUint8Array = Array\nexport type NestedBufferArray = Array\n\n/**\n * Convert BN to 0x-prefixed hex string.\n */\nexport function bnToHex(value: BN): PrefixedHexString {\n return `0x${value.toString(16)}`\n}\n\n/**\n * Convert value from BN to an unpadded Buffer\n * (useful for RLP transport)\n * @param value value to convert\n */\nexport function bnToUnpaddedBuffer(value: BN): Buffer {\n // Using `bn.toArrayLike(Buffer)` instead of `bn.toBuffer()`\n // for compatibility with browserify and similar tools\n return unpadBuffer(value.toArrayLike(Buffer))\n}\n\n/**\n * Deprecated alias for {@link bnToUnpaddedBuffer}\n * @deprecated\n */\nexport function bnToRlp(value: BN): Buffer {\n return bnToUnpaddedBuffer(value)\n}\n\n/**\n * Type output options\n */\nexport enum TypeOutput {\n Number,\n BN,\n Buffer,\n PrefixedHexString,\n}\n\nexport type TypeOutputReturnType = {\n [TypeOutput.Number]: number\n [TypeOutput.BN]: BN\n [TypeOutput.Buffer]: Buffer\n [TypeOutput.PrefixedHexString]: PrefixedHexString\n}\n\n/**\n * Convert an input to a specified type.\n * Input of null/undefined returns null/undefined regardless of the output type.\n * @param input value to convert\n * @param outputType type to output\n */\nexport function toType(input: null, outputType: T): null\nexport function toType(input: undefined, outputType: T): undefined\nexport function toType(\n input: ToBufferInputTypes,\n outputType: T\n): TypeOutputReturnType[T]\nexport function toType(\n input: ToBufferInputTypes,\n outputType: T\n): TypeOutputReturnType[T] | undefined | null {\n if (input === null) {\n return null\n }\n if (input === undefined) {\n return undefined\n }\n\n if (typeof input === 'string' && !isHexString(input)) {\n throw new Error(`A string must be provided with a 0x-prefix, given: ${input}`)\n } else if (typeof input === 'number' && !Number.isSafeInteger(input)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative input type)'\n )\n }\n\n const output = toBuffer(input)\n\n if (outputType === TypeOutput.Buffer) {\n return output as TypeOutputReturnType[T]\n } else if (outputType === TypeOutput.BN) {\n return new BN(output) as TypeOutputReturnType[T]\n } else if (outputType === TypeOutput.Number) {\n const bn = new BN(output)\n const max = new BN(Number.MAX_SAFE_INTEGER.toString())\n if (bn.gt(max)) {\n throw new Error(\n 'The provided number is greater than MAX_SAFE_INTEGER (please use an alternative output type)'\n )\n }\n return bn.toNumber() as TypeOutputReturnType[T]\n } else {\n // outputType === TypeOutput.PrefixedHexString\n return `0x${output.toString('hex')}` as TypeOutputReturnType[T]\n }\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","/*\n This file is part of web3.js.\n\n web3.js is free software: you can redistribute it and/or modify\n it under the terms of the GNU Lesser General Public License as published by\n the Free Software Foundation, either version 3 of the License, or\n (at your option) any later version.\n\n web3.js is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n GNU Lesser General Public License for more details.\n\n You should have received a copy of the GNU Lesser General Public License\n along with web3.js. If not, see .\n*/\n/**\n * @file index.js\n * @authors:\n * Fabian Vogelsteller \n * Gav Wood \n * Jeffrey Wilcke \n * Marek Kotewicz \n * Marian Oancea \n * @date 2017\n */\n\"use strict\";\nvar version = require('../package.json').version;\nvar core = require('web3-core');\nvar Eth = require('web3-eth');\nvar Net = require('web3-net');\nvar Personal = require('web3-eth-personal');\nvar Shh = require('web3-shh');\nvar Bzz = require('web3-bzz');\nvar utils = require('web3-utils');\nvar Web3 = function Web3() {\n var _this = this;\n // sets _requestmanager etc\n core.packageInit(this, arguments);\n this.version = version;\n this.utils = utils;\n this.eth = new Eth(this);\n this.shh = new Shh(this);\n this.bzz = new Bzz(this);\n // overwrite package setProvider\n var setProvider = this.setProvider;\n this.setProvider = function (provider, net) {\n /*jshint unused: false */\n setProvider.apply(_this, arguments);\n _this.eth.setRequestManager(_this._requestManager);\n _this.shh.setRequestManager(_this._requestManager);\n _this.bzz.setProvider(provider);\n return true;\n };\n};\nWeb3.version = version;\nWeb3.utils = utils;\nWeb3.modules = {\n Eth: Eth,\n Net: Net,\n Personal: Personal,\n Shh: Shh,\n Bzz: Bzz\n};\ncore.addProviders(Web3);\nmodule.exports = Web3;\n","'use strict'\n\nvar Transform = require('readable-stream').Transform\nvar duplexify = require('duplexify')\nvar WS = require('ws')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = WebSocketStream\n\nfunction buildProxy (options, socketWrite, socketEnd) {\n var proxy = new Transform({\n objectMode: options.objectMode\n })\n\n proxy._write = socketWrite\n proxy._flush = socketEnd\n\n return proxy\n}\n\nfunction WebSocketStream(target, protocols, options) {\n var stream, socket\n\n var isBrowser = process.title === 'browser'\n var isNative = !!global.WebSocket\n var socketWrite = isBrowser ? socketWriteBrowser : socketWriteNode\n\n if (protocols && !Array.isArray(protocols) && 'object' === typeof protocols) {\n // accept the \"options\" Object as the 2nd argument\n options = protocols\n protocols = null\n\n if (typeof options.protocol === 'string' || Array.isArray(options.protocol)) {\n protocols = options.protocol;\n }\n }\n\n if (!options) options = {}\n\n if (options.objectMode === undefined) {\n options.objectMode = !(options.binary === true || options.binary === undefined)\n }\n\n var proxy = buildProxy(options, socketWrite, socketEnd)\n\n if (!options.objectMode) {\n proxy._writev = writev\n }\n\n // browser only: sets the maximum socket buffer size before throttling\n var bufferSize = options.browserBufferSize || 1024 * 512\n\n // browser only: how long to wait when throttling\n var bufferTimeout = options.browserBufferTimeout || 1000\n\n // use existing WebSocket object that was passed in\n if (typeof target === 'object') {\n socket = target\n // otherwise make a new one\n } else {\n // special constructor treatment for native websockets in browsers, see\n // https://github.com/maxogden/websocket-stream/issues/82\n if (isNative && isBrowser) {\n socket = new WS(target, protocols)\n } else {\n socket = new WS(target, protocols, options)\n }\n\n socket.binaryType = 'arraybuffer'\n }\n \n // according to https://github.com/baygeldin/ws-streamify/issues/1\n // Nodejs WebSocketServer cause memory leak\n // Handlers like onerror, onclose, onmessage and onopen are accessible via setter/getter\n // And setter first of all fires removeAllListeners, that doesnt make inner array of clients on WebSocketServer cleared ever\n var eventListenerSupport = ('undefined' === typeof socket.addEventListener)\n\n // was already open when passed in\n if (socket.readyState === socket.OPEN) {\n stream = proxy\n } else {\n stream = stream = duplexify(undefined, undefined, options)\n if (!options.objectMode) {\n stream._writev = writev\n }\n \n if (eventListenerSupport) {\n socket.addEventListener('open', onopen)\n } else {\n socket.onopen = onopen\n }\n }\n\n stream.socket = socket\n\n if (eventListenerSupport) {\n socket.addEventListener('close', onclose)\n socket.addEventListener('error', onerror)\n socket.addEventListener('message', onmessage)\n } else {\n socket.onclose = onclose\n socket.onerror = onerror\n socket.onmessage = onmessage\n }\n\n proxy.on('close', destroy)\n\n var coerceToBuffer = !options.objectMode\n\n function socketWriteNode(chunk, enc, next) {\n // avoid errors, this never happens unless\n // destroy() is called\n if (socket.readyState !== socket.OPEN) {\n next()\n return\n }\n\n if (coerceToBuffer && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, 'utf8')\n }\n socket.send(chunk, next)\n }\n\n function socketWriteBrowser(chunk, enc, next) {\n if (socket.bufferedAmount > bufferSize) {\n setTimeout(socketWriteBrowser, bufferTimeout, chunk, enc, next)\n return\n }\n\n if (coerceToBuffer && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, 'utf8')\n }\n\n try {\n socket.send(chunk)\n } catch(err) {\n return next(err)\n }\n\n next()\n }\n\n function socketEnd(done) {\n socket.close()\n done()\n }\n\n function onopen() {\n stream.setReadable(proxy)\n stream.setWritable(proxy)\n stream.emit('connect')\n }\n\n function onclose() {\n stream.end()\n stream.destroy()\n }\n\n function onerror(err) {\n stream.destroy(err)\n }\n\n function onmessage(event) {\n var data = event.data\n if (data instanceof ArrayBuffer) data = Buffer.from(data)\n else data = Buffer.from(data, 'utf8')\n proxy.push(data)\n }\n\n function destroy() {\n socket.close()\n }\n\n // this is to be enabled only if objectMode is false\n function writev (chunks, cb) {\n var buffers = new Array(chunks.length)\n for (var i = 0; i < chunks.length; i++) {\n if (typeof chunks[i].chunk === 'string') {\n buffers[i] = Buffer.from(chunks[i], 'utf8')\n } else {\n buffers[i] = chunks[i].chunk\n }\n }\n\n this._write(Buffer.concat(buffers), 'binary', cb)\n }\n\n return stream\n}\n","\nvar ws = null\n\nif (typeof WebSocket !== 'undefined') {\n ws = WebSocket\n} else if (typeof MozWebSocket !== 'undefined') {\n ws = MozWebSocket\n} else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket\n}\n\nmodule.exports = ws\n","var _globalThis;\nif (typeof globalThis === 'object') {\n\t_globalThis = globalThis;\n} else {\n\ttry {\n\t\t_globalThis = require('es5-ext/global');\n\t} catch (error) {\n\t} finally {\n\t\tif (!_globalThis && typeof window !== 'undefined') { _globalThis = window; }\n\t\tif (!_globalThis) { throw new Error('Could not determine global this'); }\n\t}\n}\n\nvar NativeWebSocket = _globalThis.WebSocket || _globalThis.MozWebSocket;\nvar websocket_version = require('./version');\n\n\n/**\n * Expose a W3C WebSocket class with just one or two arguments.\n */\nfunction W3CWebSocket(uri, protocols) {\n\tvar native_instance;\n\n\tif (protocols) {\n\t\tnative_instance = new NativeWebSocket(uri, protocols);\n\t}\n\telse {\n\t\tnative_instance = new NativeWebSocket(uri);\n\t}\n\n\t/**\n\t * 'native_instance' is an instance of nativeWebSocket (the browser's WebSocket\n\t * class). Since it is an Object it will be returned as it is when creating an\n\t * instance of W3CWebSocket via 'new W3CWebSocket()'.\n\t *\n\t * ECMAScript 5: http://bclary.com/2004/11/07/#a-13.2.2\n\t */\n\treturn native_instance;\n}\nif (NativeWebSocket) {\n\t['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'].forEach(function(prop) {\n\t\tObject.defineProperty(W3CWebSocket, prop, {\n\t\t\tget: function() { return NativeWebSocket[prop]; }\n\t\t});\n\t});\n}\n\n/**\n * Module exports.\n */\nmodule.exports = {\n 'w3cwebsocket' : NativeWebSocket ? W3CWebSocket : null,\n 'version' : websocket_version\n};\n","module.exports = require('../package.json').version;\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","var bs58check = require('bs58check')\n\nfunction decodeRaw (buffer, version) {\n // check version only if defined\n if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')\n\n // uncompressed\n if (buffer.length === 33) {\n return {\n version: buffer[0],\n privateKey: buffer.slice(1, 33),\n compressed: false\n }\n }\n\n // invalid length\n if (buffer.length !== 34) throw new Error('Invalid WIF length')\n\n // invalid compression flag\n if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')\n\n return {\n version: buffer[0],\n privateKey: buffer.slice(1, 33),\n compressed: true\n }\n}\n\nfunction encodeRaw (version, privateKey, compressed) {\n var result = new Buffer(compressed ? 34 : 33)\n\n result.writeUInt8(version, 0)\n privateKey.copy(result, 1)\n\n if (compressed) {\n result[33] = 0x01\n }\n\n return result\n}\n\nfunction decode (string, version) {\n return decodeRaw(bs58check.decode(string), version)\n}\n\nfunction encode (version, privateKey, compressed) {\n if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))\n\n return bs58check.encode(\n encodeRaw(\n version.version,\n version.privateKey,\n version.compressed\n )\n )\n}\n\nmodule.exports = {\n decode: decode,\n decodeRaw: decodeRaw,\n encode: encode,\n encodeRaw: encodeRaw\n}\n","// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n","var queryString = require('query-string')\nvar setQuery = require('url-set-query')\nvar assign = require('object-assign')\nvar ensureHeader = require('./lib/ensure-header.js')\n\n// this is replaced in the browser\nvar request = require('./lib/request.js')\n\nvar mimeTypeJson = 'application/json'\nvar noop = function () {}\n\nmodule.exports = xhrRequest\nfunction xhrRequest (url, opt, cb) {\n if (!url || typeof url !== 'string') {\n throw new TypeError('must specify a URL')\n }\n if (typeof opt === 'function') {\n cb = opt\n opt = {}\n }\n if (cb && typeof cb !== 'function') {\n throw new TypeError('expected cb to be undefined or a function')\n }\n\n cb = cb || noop\n opt = opt || {}\n\n var defaultResponse = opt.json ? 'json' : 'text'\n opt = assign({ responseType: defaultResponse }, opt)\n\n var headers = opt.headers || {}\n var method = (opt.method || 'GET').toUpperCase()\n var query = opt.query\n if (query) {\n if (typeof query !== 'string') {\n query = queryString.stringify(query)\n }\n url = setQuery(url, query)\n }\n\n // allow json response\n if (opt.responseType === 'json') {\n ensureHeader(headers, 'Accept', mimeTypeJson)\n }\n\n // if body content is json\n if (opt.json && method !== 'GET' && method !== 'HEAD') {\n ensureHeader(headers, 'Content-Type', mimeTypeJson)\n opt.body = JSON.stringify(opt.body)\n }\n\n opt.method = method\n opt.url = url\n opt.headers = headers\n delete opt.query\n delete opt.json\n\n return request(opt, cb)\n}\n","module.exports = ensureHeader\nfunction ensureHeader (headers, key, value) {\n var lower = key.toLowerCase()\n if (!headers[key] && !headers[lower]) {\n headers[key] = value\n }\n}\n","module.exports = getResponse\nfunction getResponse (opt, resp) {\n if (!resp) return null\n return {\n statusCode: resp.statusCode,\n headers: resp.headers,\n method: opt.method,\n url: opt.url,\n // the XHR object in browser, http response in Node\n rawRequest: resp.rawRequest ? resp.rawRequest : resp\n }\n}\n","var xhr = require('xhr')\nvar normalize = require('./normalize-response')\nvar noop = function () {}\n\nmodule.exports = xhrRequest\nfunction xhrRequest (opt, cb) {\n delete opt.uri\n\n // for better JSON.parse error handling than xhr module\n var useJson = false\n if (opt.responseType === 'json') {\n opt.responseType = 'text'\n useJson = true\n }\n\n var req = xhr(opt, function xhrRequestResult (err, resp, body) {\n if (useJson && !err) {\n try {\n var text = resp.rawRequest.responseText\n body = JSON.parse(text)\n } catch (e) {\n err = e\n }\n }\n\n resp = normalize(opt, resp)\n if (err) cb(err, null, resp)\n else cb(err, body, resp)\n cb = noop\n })\n\n // Patch abort() so that it also calls the callback, but with an error\n var onabort = req.onabort\n req.onabort = function () {\n var ret = onabort.apply(req, Array.prototype.slice.call(arguments))\n cb(new Error('XHR Aborted'))\n cb = noop\n return ret\n }\n\n return req\n}\n","\"use strict\";\nvar window = require(\"global/window\")\nvar isFunction = require(\"is-function\")\nvar parseHeaders = require(\"parse-headers\")\nvar xtend = require(\"xtend\")\n\nmodule.exports = createXHR\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = createXHR;\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function(method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function(uri, options, callback) {\n options = initParams(uri, options, callback)\n options.method = method.toUpperCase()\n return _createXHR(options)\n }\n})\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i])\n }\n}\n\nfunction isEmpty(obj){\n for(var i in obj){\n if(obj.hasOwnProperty(i)) return false\n }\n return true\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri\n\n if (isFunction(options)) {\n callback = options\n if (typeof uri === \"string\") {\n params = {uri:uri}\n }\n } else {\n params = xtend(options, {uri: uri})\n }\n\n params.callback = callback\n return params\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback)\n return _createXHR(options)\n}\n\nfunction _createXHR(options) {\n if(typeof options.callback === \"undefined\"){\n throw new Error(\"callback argument missing\")\n }\n\n var called = false\n var callback = function cbOnce(err, response, body){\n if(!called){\n called = true\n options.callback(err, response, body)\n }\n }\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0)\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined\n\n if (xhr.response) {\n body = xhr.response\n } else {\n body = xhr.responseText || getXml(xhr)\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body)\n } catch (e) {}\n }\n\n return body\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer)\n if(!(evt instanceof Error)){\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n }\n evt.statusCode = 0\n return callback(evt, failureResponse)\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return\n var status\n clearTimeout(timeoutTimer)\n if(options.useXDR && xhr.status===undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200\n } else {\n status = (xhr.status === 1223 ? 204 : xhr.status)\n }\n var response = failureResponse\n var err = null\n\n if (status !== 0){\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n }\n if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders())\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\")\n }\n return callback(err, response, response.body)\n }\n\n var xhr = options.xhr || null\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest()\n }else{\n xhr = new createXHR.XMLHttpRequest()\n }\n }\n\n var key\n var aborted\n var uri = xhr.url = options.uri || options.url\n var method = xhr.method = options.method || \"GET\"\n var body = options.body || options.data\n var headers = xhr.headers = options.headers || {}\n var sync = !!options.sync\n var isJson = false\n var timeoutTimer\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n }\n\n if (\"json\" in options && options.json !== false) {\n isJson = true\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n body = JSON.stringify(options.json === true ? body : options.json)\n }\n }\n\n xhr.onreadystatechange = readystatechange\n xhr.onload = loadFunc\n xhr.onerror = errorFunc\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n }\n xhr.onabort = function(){\n aborted = true;\n }\n xhr.ontimeout = errorFunc\n xhr.open(method, uri, !sync, options.username, options.password)\n //has to be after open\n if(!sync) {\n xhr.withCredentials = !!options.withCredentials\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0 ) {\n timeoutTimer = setTimeout(function(){\n if (aborted) return\n aborted = true//IE9 may still call readystatechange\n xhr.abort(\"timeout\")\n var e = new Error(\"XMLHttpRequest timeout\")\n e.code = \"ETIMEDOUT\"\n errorFunc(e)\n }, options.timeout )\n }\n\n if (xhr.setRequestHeader) {\n for(key in headers){\n if(headers.hasOwnProperty(key)){\n xhr.setRequestHeader(key, headers[key])\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType\n }\n\n if (\"beforeSend\" in options &&\n typeof options.beforeSend === \"function\"\n ) {\n options.beforeSend(xhr)\n }\n\n // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n xhr.send(body || null)\n\n return xhr\n\n\n}\n\nfunction getXml(xhr) {\n // xhr.responseXML will throw Exception \"InvalidStateError\" or \"DOMException\"\n // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML.\n try {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML\n }\n var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\"\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML\n }\n } catch (e) {}\n\n return null\n}\n\nfunction noop() {}\n",null,null,null,null,null,null,"import ponyfillSymbolObservable from 'symbol-observable/ponyfill';\nimport { getPolyfill as getGlobalThis } from 'globalthis';\n\nconst $$observable = ponyfillSymbolObservable(getGlobalThis());\n\nconst NO = {};\nfunction noop() { }\n\nfunction cp(a: Array): Array {\n const l = a.length;\n const b = Array(l);\n for (let i = 0; i < l; ++i) b[i] = a[i];\n return b;\n}\n\nfunction and(f1: (t: T) => boolean, f2: (t: T) => boolean): (t: T) => boolean {\n return function andFn(t: T): boolean {\n return f1(t) && f2(t);\n };\n}\n\ninterface FContainer {\n f(t: T): R;\n}\n\nfunction _try(c: FContainer, t: T, u: Stream): R | {} {\n try {\n return c.f(t);\n } catch (e) {\n u._e(e);\n return NO;\n }\n}\n\nexport interface InternalListener {\n _n: (v: T) => void;\n _e: (err: any) => void;\n _c: () => void;\n}\n\nconst NO_IL: InternalListener = {\n _n: noop,\n _e: noop,\n _c: noop,\n};\n\nexport interface InternalProducer {\n _start(listener: InternalListener): void;\n _stop: () => void;\n}\n\nexport interface OutSender {\n out: Stream;\n}\n\nexport interface Operator extends InternalProducer, InternalListener, OutSender {\n type: string;\n ins: Stream;\n _start(out: Stream): void;\n}\n\nexport interface Aggregator extends InternalProducer, OutSender {\n type: string;\n insArr: Array>;\n _start(out: Stream): void;\n}\n\nexport interface Producer {\n start: (listener: Listener) => void;\n stop: () => void;\n}\n\nexport interface Listener {\n next: (x: T) => void;\n error: (err: any) => void;\n complete: () => void;\n}\n\nexport interface Subscription {\n unsubscribe(): void;\n}\n\nexport interface Observable {\n subscribe(listener: Listener): Subscription;\n}\n\n// mutates the input\nfunction internalizeProducer(producer: Producer & Partial>) {\n producer._start = function _start(il: InternalListener & Partial>) {\n il.next = il._n;\n il.error = il._e;\n il.complete = il._c;\n this.start(il as Listener);\n };\n producer._stop = producer.stop;\n}\n\nclass StreamSub implements Subscription {\n constructor(private _stream: Stream, private _listener: InternalListener) { }\n\n unsubscribe(): void {\n this._stream._remove(this._listener);\n }\n}\n\nclass Observer implements Listener {\n constructor(private _listener: InternalListener) { }\n\n next(value: T) {\n this._listener._n(value);\n }\n\n error(err: any) {\n this._listener._e(err);\n }\n\n complete() {\n this._listener._c();\n }\n}\n\nclass FromObservable implements InternalProducer {\n public type = 'fromObservable';\n public ins: Observable;\n public out?: Stream;\n private active: boolean;\n private _sub: Subscription | undefined;\n\n constructor(observable: Observable) {\n this.ins = observable;\n this.active = false;\n }\n\n _start(out: Stream) {\n this.out = out;\n this.active = true;\n this._sub = this.ins.subscribe(new Observer(out));\n if (!this.active) this._sub.unsubscribe();\n }\n\n _stop() {\n if (this._sub) this._sub.unsubscribe();\n this.active = false;\n }\n}\n\nexport interface MergeSignature {\n (): Stream;\n (s1: Stream): Stream;\n (\n s1: Stream,\n s2: Stream): Stream;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream): Stream;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream): Stream;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream): Stream;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream): Stream;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream,\n s7: Stream): Stream;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream,\n s7: Stream,\n s8: Stream): Stream;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream,\n s7: Stream,\n s8: Stream,\n s9: Stream): Stream;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream,\n s7: Stream,\n s8: Stream,\n s9: Stream,\n s10: Stream): Stream;\n (...stream: Array>): Stream;\n}\n\nclass Merge implements Aggregator, InternalListener {\n public type = 'merge';\n public insArr: Array>;\n public out: Stream;\n private ac: number; // ac is activeCount\n\n constructor(insArr: Array>) {\n this.insArr = insArr;\n this.out = NO as Stream;\n this.ac = 0;\n }\n\n _start(out: Stream): void {\n this.out = out;\n const s = this.insArr;\n const L = s.length;\n this.ac = L;\n for (let i = 0; i < L; i++) s[i]._add(this);\n }\n\n _stop(): void {\n const s = this.insArr;\n const L = s.length;\n for (let i = 0; i < L; i++) s[i]._remove(this);\n this.out = NO as Stream;\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n u._n(t);\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n if (--this.ac <= 0) {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n }\n}\n\nexport interface CombineSignature {\n (): Stream>;\n (s1: Stream): Stream<[T1]>;\n (\n s1: Stream,\n s2: Stream): Stream<[T1, T2]>;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream): Stream<[T1, T2, T3]>;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream): Stream<[T1, T2, T3, T4]>;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream): Stream<[T1, T2, T3, T4, T5]>;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream): Stream<[T1, T2, T3, T4, T5, T6]>;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream,\n s7: Stream): Stream<[T1, T2, T3, T4, T5, T6, T7]>;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream,\n s7: Stream,\n s8: Stream): Stream<[T1, T2, T3, T4, T5, T6, T7, T8]>;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream,\n s7: Stream,\n s8: Stream,\n s9: Stream): Stream<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>;\n (\n s1: Stream,\n s2: Stream,\n s3: Stream,\n s4: Stream,\n s5: Stream,\n s6: Stream,\n s7: Stream,\n s8: Stream,\n s9: Stream,\n s10: Stream): Stream<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>;\n (...stream: Array>): Stream>;\n (...stream: Array>): Stream>;\n}\n\nclass CombineListener implements InternalListener, OutSender> {\n private i: number;\n public out: Stream>;\n private p: Combine;\n\n constructor(i: number, out: Stream>, p: Combine) {\n this.i = i;\n this.out = out;\n this.p = p;\n p.ils.push(this);\n }\n\n _n(t: T): void {\n const p = this.p, out = this.out;\n if (out === NO) return;\n if (p.up(t, this.i)) {\n const b = cp(p.vals);\n out._n(b);\n }\n }\n\n _e(err: any): void {\n const out = this.out;\n if (out === NO) return;\n out._e(err);\n }\n\n _c(): void {\n const p = this.p;\n if (p.out === NO) return;\n if (--p.Nc === 0) p.out._c();\n }\n}\n\nclass Combine implements Aggregator> {\n public type = 'combine';\n public insArr: Array>;\n public out: Stream>;\n public ils: Array>;\n public Nc: number; // *N*umber of streams still to send *c*omplete\n public Nn: number; // *N*umber of streams still to send *n*ext\n public vals: Array;\n\n constructor(insArr: Array>) {\n this.insArr = insArr;\n this.out = NO as Stream>;\n this.ils = [];\n this.Nc = this.Nn = 0;\n this.vals = [];\n }\n\n up(t: any, i: number): boolean {\n const v = this.vals[i];\n const Nn = !this.Nn ? 0 : v === NO ? --this.Nn : this.Nn;\n this.vals[i] = t;\n return Nn === 0;\n }\n\n _start(out: Stream>): void {\n this.out = out;\n const s = this.insArr;\n const n = this.Nc = this.Nn = s.length;\n const vals = this.vals = new Array(n);\n if (n === 0) {\n out._n([]);\n out._c();\n } else {\n for (let i = 0; i < n; i++) {\n vals[i] = NO;\n s[i]._add(new CombineListener(i, out, this));\n }\n }\n }\n\n _stop(): void {\n const s = this.insArr;\n const n = s.length;\n const ils = this.ils;\n for (let i = 0; i < n; i++) s[i]._remove(ils[i]);\n this.out = NO as Stream>;\n this.ils = [];\n this.vals = [];\n }\n}\n\nclass FromArray implements InternalProducer {\n public type = 'fromArray';\n public a: Array;\n\n constructor(a: Array) {\n this.a = a;\n }\n\n _start(out: InternalListener): void {\n const a = this.a;\n for (let i = 0, n = a.length; i < n; i++) out._n(a[i]);\n out._c();\n }\n\n _stop(): void {\n }\n}\n\nclass FromPromise implements InternalProducer {\n public type = 'fromPromise';\n public on: boolean;\n public p: PromiseLike;\n\n constructor(p: PromiseLike) {\n this.on = false;\n this.p = p;\n }\n\n _start(out: InternalListener): void {\n const prod = this;\n this.on = true;\n this.p.then(\n (v: T) => {\n if (prod.on) {\n out._n(v);\n out._c();\n }\n },\n (e: any) => {\n out._e(e);\n },\n ).then(noop, (err: any) => {\n setTimeout(() => { throw err; });\n });\n }\n\n _stop(): void {\n this.on = false;\n }\n}\n\nclass Periodic implements InternalProducer {\n public type = 'periodic';\n public period: number;\n private intervalID: any;\n private i: number;\n\n constructor(period: number) {\n this.period = period;\n this.intervalID = -1;\n this.i = 0;\n }\n\n _start(out: InternalListener): void {\n const self = this;\n function intervalHandler() { out._n(self.i++); }\n this.intervalID = setInterval(intervalHandler, this.period);\n }\n\n _stop(): void {\n if (this.intervalID !== -1) clearInterval(this.intervalID);\n this.intervalID = -1;\n this.i = 0;\n }\n}\n\nclass Debug implements Operator {\n public type = 'debug';\n public ins: Stream;\n public out: Stream;\n private s: (t: T) => any; // spy\n private l: string; // label\n\n constructor(ins: Stream);\n constructor(ins: Stream, arg?: string);\n constructor(ins: Stream, arg?: (t: T) => any);\n constructor(ins: Stream, arg?: string | ((t: T) => any));\n constructor(ins: Stream, arg?: string | ((t: T) => any) | undefined) {\n this.ins = ins;\n this.out = NO as Stream;\n this.s = noop;\n this.l = '';\n if (typeof arg === 'string') this.l = arg; else if (typeof arg === 'function') this.s = arg;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.out = NO as Stream;\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n const s = this.s, l = this.l;\n if (s !== noop) {\n try {\n s(t);\n } catch (e) {\n u._e(e);\n }\n } else if (l) console.log(l + ':', t); else console.log(t);\n u._n(t);\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n}\n\nclass Drop implements Operator {\n public type = 'drop';\n public ins: Stream;\n public out: Stream;\n public max: number;\n private dropped: number;\n\n constructor(max: number, ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n this.max = max;\n this.dropped = 0;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.dropped = 0;\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.out = NO as Stream;\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n if (this.dropped++ >= this.max) u._n(t);\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n}\n\nclass EndWhenListener implements InternalListener {\n private out: Stream;\n private op: EndWhen;\n\n constructor(out: Stream, op: EndWhen) {\n this.out = out;\n this.op = op;\n }\n\n _n() {\n this.op.end();\n }\n\n _e(err: any) {\n this.out._e(err);\n }\n\n _c() {\n this.op.end();\n }\n}\n\nclass EndWhen implements Operator {\n public type = 'endWhen';\n public ins: Stream;\n public out: Stream;\n public o: Stream; // o = other\n private oil: InternalListener; // oil = other InternalListener\n\n constructor(o: Stream, ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n this.o = o;\n this.oil = NO_IL;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.o._add(this.oil = new EndWhenListener(out, this));\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.o._remove(this.oil);\n this.out = NO as Stream;\n this.oil = NO_IL;\n }\n\n end(): void {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n u._n(t);\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n this.end();\n }\n}\n\nclass Filter implements Operator {\n public type = 'filter';\n public ins: Stream;\n public out: Stream;\n public f: (t: T) => boolean;\n\n constructor(passes: (t: T) => boolean, ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n this.f = passes;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.out = NO as Stream;\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n const r = _try(this, t, u);\n if (r === NO || !r) return;\n u._n(t);\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n}\n\nclass FlattenListener implements InternalListener {\n private out: Stream;\n private op: Flatten;\n\n constructor(out: Stream, op: Flatten) {\n this.out = out;\n this.op = op;\n }\n\n _n(t: T) {\n this.out._n(t);\n }\n\n _e(err: any) {\n this.out._e(err);\n }\n\n _c() {\n this.op.inner = NO as Stream;\n this.op.less();\n }\n}\n\nclass Flatten implements Operator, T> {\n public type = 'flatten';\n public ins: Stream>;\n public out: Stream;\n private open: boolean;\n public inner: Stream; // Current inner Stream\n private il: InternalListener; // Current inner InternalListener\n\n constructor(ins: Stream>) {\n this.ins = ins;\n this.out = NO as Stream;\n this.open = true;\n this.inner = NO as Stream;\n this.il = NO_IL;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.open = true;\n this.inner = NO as Stream;\n this.il = NO_IL;\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n if (this.inner !== NO) this.inner._remove(this.il);\n this.out = NO as Stream;\n this.open = true;\n this.inner = NO as Stream;\n this.il = NO_IL;\n }\n\n less(): void {\n const u = this.out;\n if (u === NO) return;\n if (!this.open && this.inner === NO) u._c();\n }\n\n _n(s: Stream) {\n const u = this.out;\n if (u === NO) return;\n const { inner, il } = this;\n if (inner !== NO && il !== NO_IL) inner._remove(il);\n (this.inner = s)._add(this.il = new FlattenListener(u, this));\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n this.open = false;\n this.less();\n }\n}\n\nclass Fold implements Operator {\n public type = 'fold';\n public ins: Stream;\n public out: Stream;\n public f: (t: T) => R;\n public seed: R;\n private acc: R; // initialized as seed\n\n constructor(f: (acc: R, t: T) => R, seed: R, ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n this.f = (t: T) => f(this.acc, t);\n this.acc = this.seed = seed;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.acc = this.seed;\n out._n(this.acc);\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.out = NO as Stream;\n this.acc = this.seed;\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n const r = _try(this, t, u);\n if (r === NO) return;\n u._n(this.acc = r as R);\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n}\n\nclass Last implements Operator {\n public type = 'last';\n public ins: Stream;\n public out: Stream;\n private has: boolean;\n private val: T;\n\n constructor(ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n this.has = false;\n this.val = NO as T;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.has = false;\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.out = NO as Stream;\n this.val = NO as T;\n }\n\n _n(t: T) {\n this.has = true;\n this.val = t;\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n const u = this.out;\n if (u === NO) return;\n if (this.has) {\n u._n(this.val);\n u._c();\n } else u._e(new Error('last() failed because input stream completed'));\n }\n}\n\nclass MapOp implements Operator {\n public type = 'map';\n public ins: Stream;\n public out: Stream;\n public f: (t: T) => R;\n\n constructor(project: (t: T) => R, ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n this.f = project;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.out = NO as Stream;\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n const r = _try(this, t, u);\n if (r === NO) return;\n u._n(r as R);\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n}\n\nclass Remember implements InternalProducer {\n public type = 'remember';\n public ins: Stream;\n public out: Stream;\n\n constructor(ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.ins._add(out);\n }\n\n _stop(): void {\n this.ins._remove(this.out);\n this.out = NO as Stream;\n }\n}\n\nclass ReplaceError implements Operator {\n public type = 'replaceError';\n public ins: Stream;\n public out: Stream;\n public f: (err: any) => Stream;\n\n constructor(replacer: (err: any) => Stream, ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n this.f = replacer;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.out = NO as Stream;\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n u._n(t);\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n try {\n this.ins._remove(this);\n (this.ins = this.f(err))._add(this);\n } catch (e) {\n u._e(e);\n }\n }\n\n _c() {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n}\n\nclass StartWith implements InternalProducer {\n public type = 'startWith';\n public ins: Stream;\n public out: Stream;\n public val: T;\n\n constructor(ins: Stream, val: T) {\n this.ins = ins;\n this.out = NO as Stream;\n this.val = val;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.out._n(this.val);\n this.ins._add(out);\n }\n\n _stop(): void {\n this.ins._remove(this.out);\n this.out = NO as Stream;\n }\n}\n\nclass Take implements Operator {\n public type = 'take';\n public ins: Stream;\n public out: Stream;\n public max: number;\n private taken: number;\n\n constructor(max: number, ins: Stream) {\n this.ins = ins;\n this.out = NO as Stream;\n this.max = max;\n this.taken = 0;\n }\n\n _start(out: Stream): void {\n this.out = out;\n this.taken = 0;\n if (this.max <= 0) out._c(); else this.ins._add(this);\n }\n\n _stop(): void {\n this.ins._remove(this);\n this.out = NO as Stream;\n }\n\n _n(t: T) {\n const u = this.out;\n if (u === NO) return;\n const m = ++this.taken;\n if (m < this.max) u._n(t); else if (m === this.max) {\n u._n(t);\n u._c();\n }\n }\n\n _e(err: any) {\n const u = this.out;\n if (u === NO) return;\n u._e(err);\n }\n\n _c() {\n const u = this.out;\n if (u === NO) return;\n u._c();\n }\n}\n\nexport class Stream implements InternalListener {\n public _prod: InternalProducer;\n protected _ils: Array>; // 'ils' = Internal listeners\n protected _stopID: any;\n protected _dl: InternalListener; // the debug listener\n protected _d: boolean; // flag indicating the existence of the debug listener\n protected _target: Stream | null; // imitation target if this Stream will imitate\n protected _err: any;\n\n constructor(producer?: InternalProducer) {\n this._prod = producer || NO as InternalProducer;\n this._ils = [];\n this._stopID = NO;\n this._dl = NO as InternalListener;\n this._d = false;\n this._target = null;\n this._err = NO;\n }\n\n _n(t: T): void {\n const a = this._ils;\n const L = a.length;\n if (this._d) this._dl._n(t);\n if (L == 1) a[0]._n(t); else if (L == 0) return; else {\n const b = cp(a);\n for (let i = 0; i < L; i++) b[i]._n(t);\n }\n }\n\n _e(err: any): void {\n if (this._err !== NO) return;\n this._err = err;\n const a = this._ils;\n const L = a.length;\n this._x();\n if (this._d) this._dl._e(err);\n if (L == 1) a[0]._e(err); else if (L == 0) return; else {\n const b = cp(a);\n for (let i = 0; i < L; i++) b[i]._e(err);\n }\n if (!this._d && L == 0) throw this._err;\n }\n\n _c(): void {\n const a = this._ils;\n const L = a.length;\n this._x();\n if (this._d) this._dl._c();\n if (L == 1) a[0]._c(); else if (L == 0) return; else {\n const b = cp(a);\n for (let i = 0; i < L; i++) b[i]._c();\n }\n }\n\n _x(): void { // tear down logic, after error or complete\n if (this._ils.length === 0) return;\n if (this._prod !== NO) this._prod._stop();\n this._err = NO;\n this._ils = [];\n }\n\n _stopNow() {\n // WARNING: code that calls this method should\n // first check if this._prod is valid (not `NO`)\n this._prod._stop();\n this._err = NO;\n this._stopID = NO;\n }\n\n _add(il: InternalListener): void {\n const ta = this._target;\n if (ta) return ta._add(il);\n const a = this._ils;\n a.push(il);\n if (a.length > 1) return;\n if (this._stopID !== NO) {\n clearTimeout(this._stopID);\n this._stopID = NO;\n } else {\n const p = this._prod;\n if (p !== NO) p._start(this);\n }\n }\n\n _remove(il: InternalListener): void {\n const ta = this._target;\n if (ta) return ta._remove(il);\n const a = this._ils;\n const i = a.indexOf(il);\n if (i > -1) {\n a.splice(i, 1);\n if (this._prod !== NO && a.length <= 0) {\n this._err = NO;\n this._stopID = setTimeout(() => this._stopNow());\n } else if (a.length === 1) {\n this._pruneCycles();\n }\n }\n }\n\n // If all paths stemming from `this` stream eventually end at `this`\n // stream, then we remove the single listener of `this` stream, to\n // force it to end its execution and dispose resources. This method\n // assumes as a precondition that this._ils has just one listener.\n _pruneCycles() {\n if (this._hasNoSinks(this, [])) this._remove(this._ils[0]);\n }\n\n // Checks whether *there is no* path starting from `x` that leads to an end\n // listener (sink) in the stream graph, following edges A->B where B is a\n // listener of A. This means these paths constitute a cycle somehow. Is given\n // a trace of all visited nodes so far.\n _hasNoSinks(x: InternalListener, trace: Array): boolean {\n if (trace.indexOf(x) !== -1)\n return true; else\n if ((x as any as OutSender).out === this)\n return true; else\n if ((x as any as OutSender).out && (x as any as OutSender).out !== NO)\n return this._hasNoSinks((x as any as OutSender).out, trace.concat(x)); else\n if ((x as Stream)._ils) {\n for (let i = 0, N = (x as Stream)._ils.length; i < N; i++)\n if (!this._hasNoSinks((x as Stream)._ils[i], trace.concat(x)))\n return false;\n return true;\n } else return false;\n }\n\n private ctor(): typeof Stream {\n return this instanceof MemoryStream ? MemoryStream : Stream;\n }\n\n /**\n * Adds a Listener to the Stream.\n *\n * @param {Listener} listener\n */\n addListener(listener: Partial>): void {\n (listener as InternalListener)._n = listener.next || noop;\n (listener as InternalListener)._e = listener.error || noop;\n (listener as InternalListener)._c = listener.complete || noop;\n this._add(listener as InternalListener);\n }\n\n /**\n * Removes a Listener from the Stream, assuming the Listener was added to it.\n *\n * @param {Listener} listener\n */\n removeListener(listener: Partial>): void {\n this._remove(listener as InternalListener);\n }\n\n /**\n * Adds a Listener to the Stream returning a Subscription to remove that\n * listener.\n *\n * @param {Listener} listener\n * @returns {Subscription}\n */\n subscribe(listener: Partial>): Subscription {\n this.addListener(listener);\n return new StreamSub(this, listener as InternalListener);\n }\n\n /**\n * Add interop between most.js and RxJS 5\n *\n * @returns {Stream}\n */\n [$$observable](): Stream {\n return this;\n }\n\n /**\n * Creates a new Stream given a Producer.\n *\n * @factory true\n * @param {Producer} producer An optional Producer that dictates how to\n * start, generate events, and stop the Stream.\n * @return {Stream}\n */\n static create(producer?: Producer): Stream {\n if (producer) {\n if (typeof producer.start !== 'function'\n || typeof producer.stop !== 'function')\n throw new Error('producer requires both start and stop functions');\n internalizeProducer(producer); // mutates the input\n }\n return new Stream(producer as InternalProducer & Producer);\n }\n\n /**\n * Creates a new MemoryStream given a Producer.\n *\n * @factory true\n * @param {Producer} producer An optional Producer that dictates how to\n * start, generate events, and stop the Stream.\n * @return {MemoryStream}\n */\n static createWithMemory(producer?: Producer): MemoryStream {\n if (producer) internalizeProducer(producer); // mutates the input\n return new MemoryStream(producer as InternalProducer & Producer);\n }\n\n /**\n * Creates a Stream that does nothing when started. It never emits any event.\n *\n * Marble diagram:\n *\n * ```text\n * never\n * -----------------------\n * ```\n *\n * @factory true\n * @return {Stream}\n */\n static never(): Stream {\n return new Stream({ _start: noop, _stop: noop });\n }\n\n /**\n * Creates a Stream that immediately emits the \"complete\" notification when\n * started, and that's it.\n *\n * Marble diagram:\n *\n * ```text\n * empty\n * -|\n * ```\n *\n * @factory true\n * @return {Stream}\n */\n static empty(): Stream {\n return new Stream({\n _start(il: InternalListener) { il._c(); },\n _stop: noop,\n });\n }\n\n /**\n * Creates a Stream that immediately emits an \"error\" notification with the\n * value you passed as the `error` argument when the stream starts, and that's\n * it.\n *\n * Marble diagram:\n *\n * ```text\n * throw(X)\n * -X\n * ```\n *\n * @factory true\n * @param error The error event to emit on the created stream.\n * @return {Stream}\n */\n static throw(error: any): Stream {\n return new Stream({\n _start(il: InternalListener) { il._e(error); },\n _stop: noop,\n });\n }\n\n /**\n * Creates a stream from an Array, Promise, or an Observable.\n *\n * @factory true\n * @param {Array|PromiseLike|Observable} input The input to make a stream from.\n * @return {Stream}\n */\n static from(input: PromiseLike | Stream | Array | Observable): Stream {\n if (typeof input[$$observable] === 'function')\n return Stream.fromObservable(input as Observable); else\n if (typeof (input as PromiseLike).then === 'function')\n return Stream.fromPromise(input as PromiseLike); else\n if (Array.isArray(input))\n return Stream.fromArray(input);\n\n throw new TypeError(`Type of input to from() must be an Array, Promise, or Observable`);\n }\n\n /**\n * Creates a Stream that immediately emits the arguments that you give to\n * *of*, then completes.\n *\n * Marble diagram:\n *\n * ```text\n * of(1,2,3)\n * 123|\n * ```\n *\n * @factory true\n * @param a The first value you want to emit as an event on the stream.\n * @param b The second value you want to emit as an event on the stream. One\n * or more of these values may be given as arguments.\n * @return {Stream}\n */\n static of(...items: Array): Stream {\n return Stream.fromArray(items);\n }\n\n /**\n * Converts an array to a stream. The returned stream will emit synchronously\n * all the items in the array, and then complete.\n *\n * Marble diagram:\n *\n * ```text\n * fromArray([1,2,3])\n * 123|\n * ```\n *\n * @factory true\n * @param {Array} array The array to be converted as a stream.\n * @return {Stream}\n */\n static fromArray(array: Array): Stream {\n return new Stream(new FromArray(array));\n }\n\n /**\n * Converts a promise to a stream. The returned stream will emit the resolved\n * value of the promise, and then complete. However, if the promise is\n * rejected, the stream will emit the corresponding error.\n *\n * Marble diagram:\n *\n * ```text\n * fromPromise( ----42 )\n * -----------------42|\n * ```\n *\n * @factory true\n * @param {PromiseLike} promise The promise to be converted as a stream.\n * @return {Stream}\n */\n static fromPromise(promise: PromiseLike): Stream {\n return new Stream(new FromPromise(promise));\n }\n\n /**\n * Converts an Observable into a Stream.\n *\n * @factory true\n * @param {any} observable The observable to be converted as a stream.\n * @return {Stream}\n */\n static fromObservable(obs: { subscribe: any }): Stream {\n if ((obs as Stream).endWhen !== undefined) return obs as Stream;\n const o = typeof obs[$$observable] === 'function' ? obs[$$observable]() : obs;\n return new Stream(new FromObservable(o));\n }\n\n /**\n * Creates a stream that periodically emits incremental numbers, every\n * `period` milliseconds.\n *\n * Marble diagram:\n *\n * ```text\n * periodic(1000)\n * ---0---1---2---3---4---...\n * ```\n *\n * @factory true\n * @param {number} period The interval in milliseconds to use as a rate of\n * emission.\n * @return {Stream}\n */\n static periodic(period: number): Stream {\n return new Stream(new Periodic(period));\n }\n\n /**\n * Blends multiple streams together, emitting events from all of them\n * concurrently.\n *\n * *merge* takes multiple streams as arguments, and creates a stream that\n * behaves like each of the argument streams, in parallel.\n *\n * Marble diagram:\n *\n * ```text\n * --1----2-----3--------4---\n * ----a-----b----c---d------\n * merge\n * --1-a--2--b--3-c---d--4---\n * ```\n *\n * @factory true\n * @param {Stream} stream1 A stream to merge together with other streams.\n * @param {Stream} stream2 A stream to merge together with other streams. Two\n * or more streams may be given as arguments.\n * @return {Stream}\n */\n static merge: MergeSignature = function merge(...streams: Array>) {\n return new Stream(new Merge(streams));\n } as MergeSignature;\n\n /**\n * Combines multiple input streams together to return a stream whose events\n * are arrays that collect the latest events from each input stream.\n *\n * *combine* internally remembers the most recent event from each of the input\n * streams. When any of the input streams emits an event, that event together\n * with all the other saved events are combined into an array. That array will\n * be emitted on the output stream. It's essentially a way of joining together\n * the events from multiple streams.\n *\n * Marble diagram:\n *\n * ```text\n * --1----2-----3--------4---\n * ----a-----b-----c--d------\n * combine\n * ----1a-2a-2b-3b-3c-3d-4d--\n * ```\n *\n * @factory true\n * @param {Stream} stream1 A stream to combine together with other streams.\n * @param {Stream} stream2 A stream to combine together with other streams.\n * Multiple streams, not just two, may be given as arguments.\n * @return {Stream}\n */\n static combine: CombineSignature = function combine(...streams: Array>) {\n return new Stream>(new Combine(streams));\n } as CombineSignature;\n\n protected _map(project: (t: T) => U): Stream | MemoryStream {\n return new (this.ctor())(new MapOp(project, this));\n }\n\n /**\n * Transforms each event from the input Stream through a `project` function,\n * to get a Stream that emits those transformed events.\n *\n * Marble diagram:\n *\n * ```text\n * --1---3--5-----7------\n * map(i => i * 10)\n * --10--30-50----70-----\n * ```\n *\n * @param {Function} project A function of type `(t: T) => U` that takes event\n * `t` of type `T` from the input Stream and produces an event of type `U`, to\n * be emitted on the output Stream.\n * @return {Stream}\n */\n map(project: (t: T) => U): Stream {\n return this._map(project);\n }\n\n /**\n * It's like `map`, but transforms each input event to always the same\n * constant value on the output Stream.\n *\n * Marble diagram:\n *\n * ```text\n * --1---3--5-----7-----\n * mapTo(10)\n * --10--10-10----10----\n * ```\n *\n * @param projectedValue A value to emit on the output Stream whenever the\n * input Stream emits any value.\n * @return {Stream}\n */\n mapTo(projectedValue: U): Stream {\n const s = this.map(() => projectedValue);\n const op: Operator = s._prod as Operator;\n op.type = 'mapTo';\n return s;\n }\n\n filter(passes: (t: T) => t is S): Stream;\n filter(passes: (t: T) => boolean): Stream;\n /**\n * Only allows events that pass the test given by the `passes` argument.\n *\n * Each event from the input stream is given to the `passes` function. If the\n * function returns `true`, the event is forwarded to the output stream,\n * otherwise it is ignored and not forwarded.\n *\n * Marble diagram:\n *\n * ```text\n * --1---2--3-----4-----5---6--7-8--\n * filter(i => i % 2 === 0)\n * ------2--------4---------6----8--\n * ```\n *\n * @param {Function} passes A function of type `(t: T) => boolean` that takes\n * an event from the input stream and checks if it passes, by returning a\n * boolean.\n * @return {Stream}\n */\n filter(passes: (t: T) => boolean): Stream {\n const p = this._prod;\n if (p instanceof Filter)\n return new Stream(new Filter(\n and((p as Filter).f, passes),\n (p as Filter).ins\n ));\n return new Stream(new Filter(passes, this));\n }\n\n /**\n * Lets the first `amount` many events from the input stream pass to the\n * output stream, then makes the output stream complete.\n *\n * Marble diagram:\n *\n * ```text\n * --a---b--c----d---e--\n * take(3)\n * --a---b--c|\n * ```\n *\n * @param {number} amount How many events to allow from the input stream\n * before completing the output stream.\n * @return {Stream}\n */\n take(amount: number): Stream {\n return new (this.ctor())(new Take(amount, this));\n }\n\n /**\n * Ignores the first `amount` many events from the input stream, and then\n * after that starts forwarding events from the input stream to the output\n * stream.\n *\n * Marble diagram:\n *\n * ```text\n * --a---b--c----d---e--\n * drop(3)\n * --------------d---e--\n * ```\n *\n * @param {number} amount How many events to ignore from the input stream\n * before forwarding all events from the input stream to the output stream.\n * @return {Stream}\n */\n drop(amount: number): Stream {\n return new Stream(new Drop(amount, this));\n }\n\n /**\n * When the input stream completes, the output stream will emit the last event\n * emitted by the input stream, and then will also complete.\n *\n * Marble diagram:\n *\n * ```text\n * --a---b--c--d----|\n * last()\n * -----------------d|\n * ```\n *\n * @return {Stream}\n */\n last(): Stream {\n return new Stream(new Last(this));\n }\n\n /**\n * Prepends the given `initial` value to the sequence of events emitted by the\n * input stream. The returned stream is a MemoryStream, which means it is\n * already `remember()`'d.\n *\n * Marble diagram:\n *\n * ```text\n * ---1---2-----3---\n * startWith(0)\n * 0--1---2-----3---\n * ```\n *\n * @param initial The value or event to prepend.\n * @return {MemoryStream}\n */\n startWith(initial: T): MemoryStream {\n return new MemoryStream(new StartWith(this, initial));\n }\n\n /**\n * Uses another stream to determine when to complete the current stream.\n *\n * When the given `other` stream emits an event or completes, the output\n * stream will complete. Before that happens, the output stream will behaves\n * like the input stream.\n *\n * Marble diagram:\n *\n * ```text\n * ---1---2-----3--4----5----6---\n * endWhen( --------a--b--| )\n * ---1---2-----3--4--|\n * ```\n *\n * @param other Some other stream that is used to know when should the output\n * stream of this operator complete.\n * @return {Stream}\n */\n endWhen(other: Stream): Stream {\n return new (this.ctor())(new EndWhen(other, this));\n }\n\n /**\n * \"Folds\" the stream onto itself.\n *\n * Combines events from the past throughout\n * the entire execution of the input stream, allowing you to accumulate them\n * together. It's essentially like `Array.prototype.reduce`. The returned\n * stream is a MemoryStream, which means it is already `remember()`'d.\n *\n * The output stream starts by emitting the `seed` which you give as argument.\n * Then, when an event happens on the input stream, it is combined with that\n * seed value through the `accumulate` function, and the output value is\n * emitted on the output stream. `fold` remembers that output value as `acc`\n * (\"accumulator\"), and then when a new input event `t` happens, `acc` will be\n * combined with that to produce the new `acc` and so forth.\n *\n * Marble diagram:\n *\n * ```text\n * ------1-----1--2----1----1------\n * fold((acc, x) => acc + x, 3)\n * 3-----4-----5--7----8----9------\n * ```\n *\n * @param {Function} accumulate A function of type `(acc: R, t: T) => R` that\n * takes the previous accumulated value `acc` and the incoming event from the\n * input stream and produces the new accumulated value.\n * @param seed The initial accumulated value, of type `R`.\n * @return {MemoryStream}\n */\n fold(accumulate: (acc: R, t: T) => R, seed: R): MemoryStream {\n return new MemoryStream(new Fold(accumulate, seed, this));\n }\n\n /**\n * Replaces an error with another stream.\n *\n * When (and if) an error happens on the input stream, instead of forwarding\n * that error to the output stream, *replaceError* will call the `replace`\n * function which returns the stream that the output stream will replicate.\n * And, in case that new stream also emits an error, `replace` will be called\n * again to get another stream to start replicating.\n *\n * Marble diagram:\n *\n * ```text\n * --1---2-----3--4-----X\n * replaceError( () => --10--| )\n * --1---2-----3--4--------10--|\n * ```\n *\n * @param {Function} replace A function of type `(err) => Stream` that takes\n * the error that occurred on the input stream or on the previous replacement\n * stream and returns a new stream. The output stream will behave like the\n * stream that this function returns.\n * @return {Stream}\n */\n replaceError(replace: (err: any) => Stream): Stream {\n return new (this.ctor())(new ReplaceError(replace, this));\n }\n\n /**\n * Flattens a \"stream of streams\", handling only one nested stream at a time\n * (no concurrency).\n *\n * If the input stream is a stream that emits streams, then this operator will\n * return an output stream which is a flat stream: emits regular events. The\n * flattening happens without concurrency. It works like this: when the input\n * stream emits a nested stream, *flatten* will start imitating that nested\n * one. However, as soon as the next nested stream is emitted on the input\n * stream, *flatten* will forget the previous nested one it was imitating, and\n * will start imitating the new nested one.\n *\n * Marble diagram:\n *\n * ```text\n * --+--------+---------------\n * \\ \\\n * \\ ----1----2---3--\n * --a--b----c----d--------\n * flatten\n * -----a--b------1----2---3--\n * ```\n *\n * @return {Stream}\n */\n flatten(this: Stream | MemoryStream>): Stream {\n return new Stream(new Flatten(this));\n }\n\n /**\n * Passes the input stream to a custom operator, to produce an output stream.\n *\n * *compose* is a handy way of using an existing function in a chained style.\n * Instead of writing `outStream = f(inStream)` you can write\n * `outStream = inStream.compose(f)`.\n *\n * @param {function} operator A function that takes a stream as input and\n * returns a stream as well.\n * @return {Stream}\n */\n compose(operator: (stream: Stream) => U): U {\n return operator(this);\n }\n\n /**\n * Returns an output stream that behaves like the input stream, but also\n * remembers the most recent event that happens on the input stream, so that a\n * newly added listener will immediately receive that memorised event.\n *\n * @return {MemoryStream}\n */\n remember(): MemoryStream {\n return new MemoryStream(new Remember(this));\n }\n\n debug(): Stream;\n debug(labelOrSpy: string): Stream;\n debug(labelOrSpy: (t: T) => any): Stream;\n /**\n * Returns an output stream that identically behaves like the input stream,\n * but also runs a `spy` function for each event, to help you debug your app.\n *\n * *debug* takes a `spy` function as argument, and runs that for each event\n * happening on the input stream. If you don't provide the `spy` argument,\n * then *debug* will just `console.log` each event. This helps you to\n * understand the flow of events through some operator chain.\n *\n * Please note that if the output stream has no listeners, then it will not\n * start, which means `spy` will never run because no actual event happens in\n * that case.\n *\n * Marble diagram:\n *\n * ```text\n * --1----2-----3-----4--\n * debug\n * --1----2-----3-----4--\n * ```\n *\n * @param {function} labelOrSpy A string to use as the label when printing\n * debug information on the console, or a 'spy' function that takes an event\n * as argument, and does not need to return anything.\n * @return {Stream}\n */\n debug(labelOrSpy?: string | ((t: T) => any)): Stream {\n return new (this.ctor())(new Debug(this, labelOrSpy));\n }\n\n /**\n * *imitate* changes this current Stream to emit the same events that the\n * `other` given Stream does. This method returns nothing.\n *\n * This method exists to allow one thing: **circular dependency of streams**.\n * For instance, let's imagine that for some reason you need to create a\n * circular dependency where stream `first$` depends on stream `second$`\n * which in turn depends on `first$`:\n *\n * \n * ```js\n * import delay from 'xstream/extra/delay'\n *\n * var first$ = second$.map(x => x * 10).take(3);\n * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100));\n * ```\n *\n * However, that is invalid JavaScript, because `second$` is undefined\n * on the first line. This is how *imitate* can help solve it:\n *\n * ```js\n * import delay from 'xstream/extra/delay'\n *\n * var secondProxy$ = xs.create();\n * var first$ = secondProxy$.map(x => x * 10).take(3);\n * var second$ = first$.map(x => x + 1).startWith(1).compose(delay(100));\n * secondProxy$.imitate(second$);\n * ```\n *\n * We create `secondProxy$` before the others, so it can be used in the\n * declaration of `first$`. Then, after both `first$` and `second$` are\n * defined, we hook `secondProxy$` with `second$` with `imitate()` to tell\n * that they are \"the same\". `imitate` will not trigger the start of any\n * stream, it just binds `secondProxy$` and `second$` together.\n *\n * The following is an example where `imitate()` is important in Cycle.js\n * applications. A parent component contains some child components. A child\n * has an action stream which is given to the parent to define its state:\n *\n * \n * ```js\n * const childActionProxy$ = xs.create();\n * const parent = Parent({...sources, childAction$: childActionProxy$});\n * const childAction$ = parent.state$.map(s => s.child.action$).flatten();\n * childActionProxy$.imitate(childAction$);\n * ```\n *\n * Note, though, that **`imitate()` does not support MemoryStreams**. If we\n * would attempt to imitate a MemoryStream in a circular dependency, we would\n * either get a race condition (where the symptom would be \"nothing happens\")\n * or an infinite cyclic emission of values. It's useful to think about\n * MemoryStreams as cells in a spreadsheet. It doesn't make any sense to\n * define a spreadsheet cell `A1` with a formula that depends on `B1` and\n * cell `B1` defined with a formula that depends on `A1`.\n *\n * If you find yourself wanting to use `imitate()` with a\n * MemoryStream, you should rework your code around `imitate()` to use a\n * Stream instead. Look for the stream in the circular dependency that\n * represents an event stream, and that would be a candidate for creating a\n * proxy Stream which then imitates the target Stream.\n *\n * @param {Stream} target The other stream to imitate on the current one. Must\n * not be a MemoryStream.\n */\n imitate(target: Stream): void {\n if (target instanceof MemoryStream)\n throw new Error('A MemoryStream was given to imitate(), but it only ' +\n 'supports a Stream. Read more about this restriction here: ' +\n 'https://github.com/staltz/xstream#faq');\n this._target = target;\n for (let ils = this._ils, N = ils.length, i = 0; i < N; i++) target._add(ils[i]);\n this._ils = [];\n }\n\n /**\n * Forces the Stream to emit the given value to its listeners.\n *\n * As the name indicates, if you use this, you are most likely doing something\n * The Wrong Way. Please try to understand the reactive way before using this\n * method. Use it only when you know what you are doing.\n *\n * @param value The \"next\" value you want to broadcast to all listeners of\n * this Stream.\n */\n shamefullySendNext(value: T) {\n this._n(value);\n }\n\n /**\n * Forces the Stream to emit the given error to its listeners.\n *\n * As the name indicates, if you use this, you are most likely doing something\n * The Wrong Way. Please try to understand the reactive way before using this\n * method. Use it only when you know what you are doing.\n *\n * @param {any} error The error you want to broadcast to all the listeners of\n * this Stream.\n */\n shamefullySendError(error: any) {\n this._e(error);\n }\n\n /**\n * Forces the Stream to emit the \"completed\" event to its listeners.\n *\n * As the name indicates, if you use this, you are most likely doing something\n * The Wrong Way. Please try to understand the reactive way before using this\n * method. Use it only when you know what you are doing.\n */\n shamefullySendComplete() {\n this._c();\n }\n\n /**\n * Adds a \"debug\" listener to the stream. There can only be one debug\n * listener, that's why this is 'setDebugListener'. To remove the debug\n * listener, just call setDebugListener(null).\n *\n * A debug listener is like any other listener. The only difference is that a\n * debug listener is \"stealthy\": its presence/absence does not trigger the\n * start/stop of the stream (or the producer inside the stream). This is\n * useful so you can inspect what is going on without changing the behavior\n * of the program. If you have an idle stream and you add a normal listener to\n * it, the stream will start executing. But if you set a debug listener on an\n * idle stream, it won't start executing (not until the first normal listener\n * is added).\n *\n * As the name indicates, we don't recommend using this method to build app\n * logic. In fact, in most cases the debug operator works just fine. Only use\n * this one if you know what you're doing.\n *\n * @param {Listener} listener\n */\n setDebugListener(listener: Partial> | null | undefined) {\n if (!listener) {\n this._d = false;\n this._dl = NO as InternalListener;\n } else {\n this._d = true;\n (listener as InternalListener)._n = listener.next || noop;\n (listener as InternalListener)._e = listener.error || noop;\n (listener as InternalListener)._c = listener.complete || noop;\n this._dl = listener as InternalListener;\n }\n }\n}\n\nexport class MemoryStream extends Stream {\n private _v?: T;\n private _has?: boolean = false;\n constructor(producer: InternalProducer) {\n super(producer);\n }\n\n _n(x: T) {\n this._v = x;\n this._has = true;\n super._n(x);\n }\n\n _add(il: InternalListener): void {\n const ta = this._target;\n if (ta) return ta._add(il);\n const a = this._ils;\n a.push(il);\n if (a.length > 1) {\n if (this._has) il._n(this._v!);\n return;\n }\n if (this._stopID !== NO) {\n if (this._has) il._n(this._v!);\n clearTimeout(this._stopID);\n this._stopID = NO;\n } else if (this._has) il._n(this._v!); else {\n const p = this._prod;\n if (p !== NO) p._start(this);\n }\n }\n\n _stopNow() {\n this._has = false;\n super._stopNow();\n }\n\n _x(): void {\n this._has = false;\n super._x();\n }\n\n map(project: (t: T) => U): MemoryStream {\n return this._map(project) as MemoryStream;\n }\n\n mapTo(projectedValue: U): MemoryStream {\n return super.mapTo(projectedValue) as MemoryStream;\n }\n\n take(amount: number): MemoryStream {\n return super.take(amount) as MemoryStream;\n }\n\n endWhen(other: Stream): MemoryStream {\n return super.endWhen(other) as MemoryStream;\n }\n\n replaceError(replace: (err: any) => Stream): MemoryStream {\n return super.replaceError(replace) as MemoryStream;\n }\n\n remember(): MemoryStream {\n return this;\n }\n\n debug(): MemoryStream;\n debug(labelOrSpy: string): MemoryStream;\n debug(labelOrSpy: (t: T) => any): MemoryStream;\n debug(labelOrSpy?: string | ((t: T) => any) | undefined): MemoryStream {\n return super.debug(labelOrSpy as any) as MemoryStream;\n }\n}\n\nexport { NO, NO_IL };\nconst xs = Stream;\ntype xs = Stream;\nexport default xs;\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n"],"names":["_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","Ticks","_ref","hideTicks","horizontal","orientation","tickClassName","tickComponent","allTickLabelProps","tickLabelProps","_ref$tickStroke","tickStroke","tickTransform","ticks","strokeWidth","tickLineProps","map","_ref2","_allTickLabelProps$in","value","index","from","to","formattedValue","tickLabelFontSize","Math","max","fontSize","tickYCoord","y","Orientation","React","Group","className","cx","transform","Line","stroke","strokeLinecap","x","Text","defaultTextProps","textAnchor","fontFamily","fill","AxisRenderer","axisFromPoint","axisLineClassName","axisToPoint","hideAxisLine","_ref$label","label","labelClassName","_ref$labelOffset","labelOffset","_ref$labelProps","labelProps","_ref$orientation","scale","_ref$stroke","strokeDasharray","_ref$strokeWidth","_ref$tickLabelProps","_ref$tickLength","tickLength","_ref$ticksComponent","ticksComponent","maxTickLabelFontSize","concat","props","range","sign","yBottomOffset","Number","getLabelTransform","toString","createPoint","Point","_excluded","Axis","_ref$children","children","axisClassName","_ref$hideAxisLine","_ref$hideTicks","_ref$hideZero","hideZero","_ref$left","left","_ref$numTicks","numTicks","_ref$rangePadding","rangePadding","tickFormat","tickValues","_ref$top","top","restProps","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","format","getTickFormatter","isLeft","isTop","tickPosition","align","s","offset","bandwidth","round","d","scaledValue","getTickPosition","tickSign","filteredTickValues","domain","filter","_","arr","getTicks","val","num","valueOf","coerceNumber","bottomTickLabelProps","dy","AxisBottom","leftTickLabelProps","dx","AxisLeft","right","bottom","DEFAULT_POINT","localPoint","node","event","elem","coords","isTouchEvent","changedTouches","clientX","clientY","isMouseEvent","boundingClientRect","getBoundingClientRect","width","height","getXAndYFromEvent","svg","SVGElement","ownerSVGElement","screenCTM","isSVGGraphicsElement","getScreenCTM","isSVGSVGElement","point","createSVGPoint","matrixTransform","inverse","rect","clientLeft","clientTop","nodeOrEvent","maybeEvent","Element","localPointGeneric","Event","nativeEvent","isEvent","LinearGradient","id","_x1","x1","_y1","y1","_x2","x2","_y2","y2","_ref$fromOffset","fromOffset","_ref$fromOpacity","fromOpacity","_ref$toOffset","toOffset","_ref$toOpacity","toOpacity","rotate","_ref$vertical","vertical","gradientTransform","stopColor","stopOpacity","propTypes","_pt","innerRef","ref","_defineProperty","obj","defineProperty","enumerable","configurable","writable","_ref$x","_ref$y","_proto","toArray","defaultIgnoreDimensions","ParentSize","_ref$debounceTime","debounceTime","_ref$ignoreDimensions","ignoreDimensions","_ref$parentSizeStyles","parentSizeStyles","_ref$enableDebounceLe","enableDebounceLeadingCall","useRef","animationFrameID","_useState","useState","state","setState","resize","useMemo","normalized","Array","isArray","debounce","incoming","existing","every","includes","leading","useEffect","observer","ResizeObserver","entries","forEach","entry","_entry$contentRect","contentRect","current","window","requestAnimationFrame","observe","cancelAnimationFrame","disconnect","cancel","style","ScaleSVG","_ref$xOrigin","xOrigin","_ref$yOrigin","yOrigin","_ref$preserveAspectRa","preserveAspectRatio","display","position","verticalAlign","overflow","viewBox","interpolatorMap","lab","interpolateLab","hcl","interpolateHcl","interpolateHclLong","hsl","interpolateHsl","interpolateHslLong","cubehelix","interpolateCubehelix","interpolateCubehelixLong","rgb","interpolateRgb","TEST_TIME","Date","UTC","localTimeIntervals","day","timeDay","hour","timeHour","minute","timeMinute","month","timeMonth","second","timeSecond","week","timeWeek","year","timeYear","utcIntervals","utcDay","utcHour","utcMinute","utcMonth","utcSecond","utcWeek","utcYear","ALL_OPERATORS","operators","config","nice","timeScale","isUtc","isUtcScale","interval","step","parsedInterval","zero","a","b","isDescending","min","domainWithZero","reverse","interpolate","interpolator","type","gamma","createColorInterpolator","console","warn","interpolateRound","base","clamp","constant","exponent","padding","paddingInner","paddingOuter","reversedRange","slice","unknown","scaleOperator","_len","ops","_key","selection","Set","selectedOps","o","has","op","updateLinearScale","createLinearScale","scaleLinear","updateTimeScale","createTimeScale","scaleTime","AreaClosed","x0","y0","yScale","_ref$data","data","_ref$defined","defined","curve","path","area","setNumOrAccessor","Bar","_ref$from","_ref$to","_ref$fill","isRectilinear","shapeRendering","LinePath","line","_temp2","d3Area","setNumberOrNumberAccessor","_temp3","_ref3","d3Line","func","MEASUREMENT_ELEMENT_ID","memoize","str","textEl","document","getElementById","createElementNS","setAttribute","appendChild","body","textContent","getComputedTextLength","e","JSON","stringify","isNumber","isXOrYInValid","xOrY","isFinite","useText","_props$verticalAnchor","verticalAnchor","_props$scaleToFit","scaleToFit","angle","_props$lineHeight","lineHeight","_props$capHeight","capHeight","textProps","_textProps$x","_textProps$y","isXOrYNotValid","_useMemo","wordsWithWidth","split","word","wordWidth","getStringWidth","spaceWidth","wordsByLines","reduce","result","currentLine","words","push","newLine","startDy","reduceCSSCalc","transforms","lineWidth","sx","sy","originX","originY","join","SVG_STYLE","_props$dx","_props$dy","_props$textAnchor","innerTextRef","_useText","useTooltip","initialTooltipState","tooltipOpen","tooltipState","setTooltipState","showTooltip","useCallback","showArgs","show","tooltipLeft","tooltipTop","tooltipData","hideTooltip","undefined","updateTooltip","defaultStyles","backgroundColor","color","borderRadius","boxShadow","pointerEvents","Tooltip","_ref$offsetLeft","offsetLeft","_ref$offsetTop","offsetTop","_ref$style","_ref$unstyled","unstyled","_ref$applyPositionSty","applyPositionStyle","_assertThisInitialized","self","ReferenceError","_setPrototypeOf","p","setPrototypeOf","__proto__","emptyRect","BaseComponent","_class","_temp","_React$PureComponent","subClass","superClass","WrappedComponent","_this","parentRect","getRects","bind","create","constructor","componentDidMount","_this2","ReactDOM","parentNode","render","displayName","initialLeft","parentBounds","ownBounds","initialTop","otherProps","placeTooltipLeft","placeTooltipUp","rightPlacementClippedPx","leftPlacementClippedPx","_rightPlacementClippedPx","innerWidth","_leftPlacementClippedPx","bottomPlacementClippedPx","topPlacementClippedPx","innerHeight","module","exports","CustomError","message","error_type","Error","SdkError","error_code","SimulationError","ZapperError","EthersError","TenderlyError","ZapProtocol","PriceFetchingError","DefaultContext","zapper","simulation","dashboardUrl","cache","useCache","url","Context","ctx","events","EventEmitter","setMaxListeners","setProvider","provider","JsonRpcProvider","read","write","emit","PROVIDER","get","etherscan","adapters","addresses","runtime","Op","hasOwn","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","err","wrap","innerFn","outerFn","tryLocsList","generator","Generator","context","_invoke","method","arg","done","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","fn","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","__await","then","unwrapped","error","return","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","doneResult","isGeneratorFunction","genFun","ctor","name","mark","awrap","async","Promise","iter","object","pop","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","CachedFetcher","chainId","fetch","queryParameters","cached","currentValue","fetchWithTimeout","status","statusText","json","maxAgeMatches","headers","_call$headers$get","match","maxAge","parseInt","now","getTime","expiryDate","cachedValue","timeout","race","setTimeout","Service","Emittery","ServiceInterface","yearn","WrappedContract","address","abi","Contract","on","ContractService","contract","_this3","LAB_ADDRESSESS","ASSET_HISTORIC_EARNINGS","blocks","block","BigZero","BigNumber","EarningsInterface","protocolEarnings","services","subgraph","fetchQuery","response","_response$data","vaults","toFixed","vault","latestUpdate","returnsGenerated","tokensValueInUsdc","token","decimals","plus","r","assetEarnings","assetAddress","_response$data2","earningsUsdc","getAddress","amount","amountUsdc","tokenAddress","accountAssetsData","accountAddress","ignoredVaults","account","_response$data3","earnings","holdings","earningsAssetData","grossApy","estimatedYearlyYield","all","vaultPositions","assetPosition","balanceTokens","balanceShares","multipliedBy","pricePerShare","div","updates","withdrawals","tokensReceived","tokensSent","deposits","positiveTokens","negativeTokens","earningsTokens","minus","balanceUsdc","earned","assetAddresses","assetsData","assetData","vision","apy","apys","totalEarnings","datum","sum","isEqualTo","net_apy","times","toNumber","assetsHistoricEarnings","fromDaysAgo","assetHistoricEarningsCache","lens","v2","assetsStatic","asset","getBlockNumber","latestBlockNumber","allSettled","assetHistoricEarnings","resolvedPromise","blockNumber","blockOffset","_this4","blocksPerDay","labels","oracle","getPriceUsdc","price","priceUsdc","earningsDayData","strategies","totalGain","strategy","latestReport","totalLoss","amountEarnt","dividedBy","pow","date","vaultDayData","timestamp","toJSON","dayData","accountHistoricEarnings","shareTokenAddress","toDaysAgo","shareToken","fromDate","getDate","toDate","_response$data$accoun","snapshotTimeline","flatMap","vaultPosition","sort","lhs","rhs","vaultPositionUpdate","snapshot","startDate","endDate","previousSnapshot","lastSnapshot","distantFuture","setFullYear","usdcPrice","vaultDayDatum","find","positives","negatives","tokenAmount","daysAgo","setDate","t","FeesInterface","protocolFees","since","sinceDate","transfers","tokenAmountUsdc","IronBankInterface","overrides","cachedFetcherGet","market","ironBank","assetsDynamic","assets","dynamic","getStatic","getDynamic","cachedFetcherGetDynamic","positionsOf","summaryOf","generalPositionOf","metadataOf","assetsUserMetadata","balances","tokens","helper","tokenBalances","balance","cachedFetcherTokens","tokenAddresses","icons","icon","supported","ZeroAddress","EthAddress","WethAddress","handleHttpError","usdc","usd","floor","int","chunkArray","array","size","chunk","PickleJars","PickleService","Map","m","jar","oneHourAgo","lastFetchedDate","fetchPickleJarPrices","pickleJarUSDPrices","_this$pickleJarUSDPri","res","jarData","clear","relevantJars","jarAddress","usdPrice","jarDatum","liquidity_locked","set","baseUrl","SimulationExecutor","telegram","simulateRaw","input","options","makeSimulationRequest","simulateVaultInteraction","targetToken","getAddressFromTopic","topic","log","transaction","transaction_info","logs","raw","topics","NO_LOG","constructedPath","forkId","getPopulatedTransactionRequest","network_id","transactionRequest","block_number","simulation_type","root","gas","gasLimit","gas_price","gasPrice","save","nonce","SIMULATION_CALL","errorMessage","simulationResponse","error_message","sendErrorMessage","TENDERLY_RESPONSE_ERROR","allCalls","getAllSimulationCalls","call_trace","partialRevertError","_allCalls$find","PARTIAL_REVERT","executeSimulationWithReSimulationOnFailure","simulate","forkIdToDeleteOnSuccess","deleteFork","callTrace","calls","signer","getSigner","maxFeePerGas","maxPriorityFeePerGas","populateTransaction","POPULATING_TRANSACTION","createFork","alias","description","CREATE_FORK","simulation_fork","simulationId","transactionUrl","item","sendMessage","VaultContract","encodeFunctionData","PickleJarContract","_VaultContract","pickleJarAbi","getRatio","YearnVaultContract","_VaultContract2","yearnVaultAbi","SimulationInterface","deposit","sellToken","toVault","zapProtocol","PICKLE","YEARN","vaultContract","FAIL_TOKEN_FETCH","underlyingToken","slippage","NO_SLIPPAGE","needsApproving","zapInApprovalState","isApproved","ZAP_IN_APPROVAL_STATE","simulationExecutor","zapInApprovalTransaction","ZAP_IN_APPROVAL","approvalTransaction","simulateZapApprovalTransaction","simulateDeposit","zapIn","depositNeedsApproving","approve","directDeposit","withdraw","fromVault","toToken","zapOutApprovalState","ZAP_OUT_APPROVAL_STATE","zapOutApprovalTransaction","ZAP_OUT_APPROVAL","simulateWithdrawal","zapOut","directWithdraw","TokenAbi","tokenContract","encodedInputData","allowance","lt","encodeDeposit","getNormalizedValueUsdc","FETCHING_PRICE_ORACLE","targetTokenAmountUsdc","NO_DECIMALS","NO_PRICE_PER_SHARE","targetUnderlyingTokensReceived","sourceTokenAddress","sourceTokenAmount","targetTokenAddress","targetTokenAmount","targetUnderlyingTokenAddress","targetUnderlyingTokenAmount","conversionRate","underlyingTokenAddress","skipGasEstimate","zapToken","ZAP_IN","zapInParams","amountReceivedUsdc","pickle","FETCHING_PRICE_PICKLE","oracleToken","zapInAmountUsdc","buyTokenAddress","encodeWithdraw","ZAP_OUT","zapOutParams","_asyncToGenerator","output","zapOutAmountUsdc","soldAssetAmountUsdc","zapApprovalTransaction","VaultAbi","StrategyInterface","vaultsStrategiesMetadata","vaultAddresses","cachedFetcher","fetchMetadataFromApi","vaultStrategiesMetadata","fetchMetadataFromChain","fetchVaultsData","vaultsData","meta","strategiesMetadata","vaultsStrategiesMetadataPromises","vaultAddress","vaultDatum","fetchVaultStrategiesMetadata","symbol","vaultsStrategyData","strategiesPromise","assetStrategiesAddresses","strat","underlyingTokenContract","underlyingTokenSymbol","debtRatio","lte","metadatum","metadata","protocols","replace","metadataAndDebtRatio","eq","ok","TokenInterface","getPriceFromRouter","fromEntries","vaultBalances","zapperBalances","vaultBalanceAddresses","ironBankTokens","cachedFetcherSupported","supportedTokens","ready","sendTransaction","gasPriceFastGwei","fast","zapInApprovalParams","approveZapOut","zapOutApprovalParams","VaultInterface","vaultMetadataOverridesPromise","vaultMetadataOverrides","allAddresses","chunks","promises","flat","strategiesMetadataPromise","assetsHistoricEarningsPromise","assetsWithOrder","override","hideAlways","order","historicEarnings","_assetsHistoricEarnin","adapter","metadataOverrides","assetsApy","tokenId","displayIcon","defaultDisplayToken","fillMetadataOverrides","_this5","tokensPromise","tokensMetadataPromise","tokensMetadata","tokenMetadata","symbolOverride","_this5$yearn$services","fillTokenMetadataOverrides","executeVaultContractTransaction","_this6","vaultRef","_this7","signature","executeZapperTransaction","fallbackGasPrice","combinedParams","_context21","code","makeTransaction","originalGasPrice","_context22","tokenIconOverride","tokenSymbolOverride","tokenNameOverride","vaultSymbolOverride","vaultIconOverride","apyTypeOverride","makeEmptyApy","apyOverride","depositsDisabled","withdrawalsDisabled","allowZapIn","allowZapOut","migrationContract","migrationTargetVault","vaultNameOverride","vaultDetailPageAssets","hideIfNoDeposits","emergencyShutdown","retired","migrationAvailable","gross_apr","fees","performance","withdrawal","management","keep_crv","cvx_keep_crv","points","composite","AssetStaticAbi","AssetDynamicAbi","Metadata","PositionAbi","AdapterAbi","struct","tuple","properties","structArray","copy","property","isBigNumberish","tuples","IronBankAdapter","_ContractService","addressByChain","assetsPromise","blocksPerYear","lendApyBips","aprBipsToApyBips","lendAprBips","borrowApyBips","borrowAprBips","adapterPositionOf","assetsTokensAddresses","aprBips","period","bn","clone","POW_PRECISION","RegistryV2Adapter","registryV2","controller","totalAssets","totalSupply","YearnAsset","YearnAssetAlt","TrustAsset","AssetService","aliases","initialize","deserializeState","parse","makeSerializedState","supportedJson","aliasesJson","alts","LensService","getAdapters","getRegistries","getAssets","getPositions","getPositionsOf","getAssetsFromAdapter","OracleService","getCalculations","calculations","getPriceUsdcRecommended","getUsdcAddress","usdcAddress","isCurveLpToken","lpToken","getCurvePriceUsdc","getBasePrice","getVirtualPrice","getCurveRegistryAddress","isIronBankMarket","getIronBankMarketPriceUsdc","getIronBankMarkets","isLpToken","token0","token1","getPriceFromRouterUsdc","getLpTokenTotalLiquidityUsdc","getLpTokenPriceUsdc","SubgraphService","subgraphName","yearnSubgraphEndpoint","query","variables","variable","toLowerCase","errors","TelegramService","text","telegramChatId","telegramBotId","params","URLSearchParams","chat_id","disable_web_page_preview","VisionService","boost","currentBoost","pool_apy","poolApy","boosted_apr","boostedApy","base_apr","baseApy","Chains","ZapperService","api_key","network","String","hide","products","balanceRaw","balanceUSD","ownerAddress","sellTokenAddress","slippagePercentage","affiliateAddress","sellAmount","poolAddress","toTokenAddress","shouldSellEntireBalance","AllowListService","validateCalldata","targetAddress","callData","success","validateCalldataByOrigin","originName","HelperService","tokenPrices","tokensPrices","tokensBalances","tokenAllowances","spenders","allowances","MetaService","buildUrl","MetaURL","TransactionService","allowListService","validateTx","Yearn","assetServiceState","allowlistAddress","allowList","setChainId","globalObject","isNumeric","mathceil","ceil","mathfloor","bignumberError","tooManyDigits","BASE","LOG_BASE","MAX_SAFE_INTEGER","POWS_TEN","SQRT_BASE","MAX","bitFloor","n","coeffToString","z","j","charCodeAt","compare","xc","c","yc","k","l","intCheck","isOdd","toExponential","toFixedPoint","len","zs","configObject","convertBase","parseNumeric","P","ONE","DECIMAL_PLACES","ROUNDING_MODE","TO_EXP_NEG","TO_EXP_POS","MIN_EXP","MAX_EXP","CRYPTO","MODULO_MODE","FORMAT","prefix","groupSize","secondaryGroupSize","groupSeparator","decimalSeparator","fractionGroupSize","fractionGroupSeparator","suffix","ALPHABET","v","alphabet","caseChanged","isNum","_isBigNumber","test","search","substring","DEBUG","toUpperCase","rm","c0","ne","maxOrMin","args","normalise","sd","ni","rd","pows10","out","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","crypto","getRandomValues","randomBytes","EXPONENTIAL_AT","RANGE","isBigNumber","maximum","minimum","gt","random","pow2_53","random53bitInt","dp","rand","Uint32Array","splice","decimal","toBaseOut","baseIn","baseOut","arrL","callerIsToString","multiply","temp","xlo","xhi","carry","klo","khi","aL","bL","cmp","subtract","more","prod","prodL","q","qc","rem","remL","rem0","xi","xL","yc0","yL","yz","NaN","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","p1","p2","absoluteValue","abs","comparedTo","decimalPlaces","dividedToIntegerBy","idiv","exponentiatedBy","half","isModExp","nIsBig","nIsNeg","nIsOdd","isInteger","mod","integerValue","isGreaterThan","isGreaterThanOrEqualTo","gte","isLessThan","isLessThanOrEqualTo","isNegative","isPositive","isZero","xLTy","xe","ye","modulo","xcL","ycL","ylo","yhi","zc","sqrtBase","negated","precision","shiftedBy","squareRoot","sqrt","rep","toFormat","g1","g2","intPart","fractionPart","isNeg","intDigits","substr","RegExp","toFraction","md","d0","d1","d2","exp","n0","n1","toPrecision","global","localStorage","msg","warned","trace","readUInt8","isArgumentsObject","require","whichTypedArray","isTypedArray","uncurryThis","f","BigIntSupported","BigInt","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","Boolean","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","isArrayBuffer","ArrayBuffer","working","isDataViewToString","isDataView","DataView","isPromise","isArrayBufferView","isView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isFloat32Array","isFloat64Array","isBigInt64Array","isBigUint64Array","isMap","isSet","WeakMap","isWeakMap","WeakSet","isWeakSet","SharedArrayBufferCopy","SharedArrayBuffer","isSharedArrayBufferToString","isSharedArrayBuffer","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","isBoxedPrimitive","isAnyArrayBuffer","Uint8Array","getOwnPropertyDescriptors","descriptors","getOwnPropertyDescriptor","formatRegExp","isString","objects","inspect","isNull","isObject","deprecate","process","noDeprecation","throwDeprecation","traceDeprecation","debugs","debugEnvRegex","env","NODE_DEBUG","debugEnv","opts","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","styles","recurseTimes","isFunction","ret","primitive","simple","formatPrimitive","visibleKeys","hash","idx","arrayToHash","getOwnPropertyNames","isError","formatError","isRegExp","isDate","braces","toUTCString","formatProperty","formatArray","cur","numLinesEst","reduceToSingleString","desc","ar","re","objectToString","pad","debuglog","pid","types","isNullOrUndefined","isSymbol","isNativeError","isPrimitive","isBuffer","months","time","getHours","getMinutes","getSeconds","getMonth","prop","inherits","origin","add","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","cb","newReason","promisify","original","promiseResolve","promiseReject","promise","defineProperties","custom","callbackify","callbackified","maybeCb","nextTick","rej","v1","v4","uuid","byteToHex","buf","bth","msCrypto","rnds8","rnds","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","ii","_typeof","_defineProperties","descriptor","_possibleConstructorReturn","_wrapNativeSuper","Class","_cache","Wrapper","_construct","_getPrototypeOf","Parent","_isNativeReflectConstruct","Reflect","construct","instance","sham","Proxy","ValidationError","_Error","_inherits","Constructor","protoProps","staticProps","_super","Derived","hasNativeReflectConstruct","Super","NewTarget","_createSuper","_classCallCheck","defineProp","captureStackTrace","default","_default2","_type","required","regexp","_size","enums","last","illegal","_error2","__esModule","_utils","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_slicedToArray","_arrayWithHoles","_i","_s","_e","_arr","_n","_d","_iterableToArrayLimit","_nonIterableRest","minLen","arr2","Property","schema","registry","_schema","messages","_entries","_entries$_i","fns","shift","_register","bool","rules","_i2","_Object$entries","_Object$entries$_i","rule","_this$_schema","cast","typecasters","_i3","_types","_run","_this$registry$type","validators","_error","_dot","_interopRequireDefault","_typecast","_property","_messages","_validators","Schema","hooks","_path","parts","hook","propagate","each","elements","nested","_keys","_loop","enumerate","typecast","walk","strict","enforce","strip","_loop2","_Object$entries2$_i","_Object$entries2","validate","_message","callback","first","_componentType","newPath","newProp","_default","_required","valueEqual","aValue","bValue","counter","bytes","RangeError","encode","oldOffset","INT","decode","encodingLength","N1","N2","N3","N4","N5","N6","N7","N8","N9","Buffer","checkUInt53","number","buffer","allocUnsafe","writeUInt8","writeUInt16LE","writeUInt32LE","readUInt16LE","readUInt32LE","lo","warning","TextEncoder","TextDecoder","swarm","Bzz","givenProvider","_requestManager","currentProvider","pick","ethereum","bzz","noProviderError","download","upload","isAvailable","at","ErrorResponse","InvalidNumberOfParams","got","expected","InvalidConnection","host","ConnectionError","InvalidProvider","InvalidResponse","ConnectionTimeout","ms","ConnectionNotOpenError","ConnectionCloseError","MaxAttemptsReachedOnReconnectingError","PendingRequestsOnReconnectingError","RevertInstructionError","TransactionRevertInstructionError","receipt","TransactionError","NoContractAddressFoundError","ContractCodeNotStoredError","TransactionRevertedWithoutReasonError","TransactionOutOfGasError","ResolverMethodMissingError","ContractMissingABIError","ContractOnceRequiresCallbackError","ContractEventDoesNotExistError","eventName","ContractReservedEventError","ContractMissingDeployDataError","ContractNoAddressDefinedError","ContractNoFromAddressDefinedError","utils","Iban","outputBigNumberFormatter","toBN","inputBlockNumberFormatter","isPredefinedBlockNumber","isHexStrict","numberToHex","_txInputFormatter","inputAddressFormatter","startsWith","isHex","outputTransactionFormatter","tx","hexToNumber","transactionIndex","isAddress","toChecksumAddress","outputLogFormatter","blockHash","transactionHash","logIndex","shaId","sha3","iban","isValid","isDirect","toAddress","inputDefaultBlockNumberFormatter","defaultBlock","inputCallFormatter","defaultAccount","inputTransactionFormatter","inputPostFormatter","post","ttl","workToProve","priority","fromUtf8","inputLogFormatter","toTopic","fromBlock","toBlock","addr","inputSignFormatter","utf8ToHex","inputStorageKeysFormatter","outputProofFormatter","proof","hexToNumberString","outputTransactionReceiptFormatter","cumulativeGasUsed","gasUsed","effectiveGasPrice","contractAddress","outputBlockFormatter","difficulty","totalDifficulty","transactions","miner","baseFeePerGas","outputPostFormatter","expiry","workProved","toUtf8","outputSyncingFormatter","startingBlock","currentBlock","highestBlock","knownStates","pulledStates","formatters","promiEvent","Subscriptions","EthersTransactionUtils","Method","inputFormatter","outputFormatter","transformPayload","extraFormatters","abiCoder","requestManager","accounts","transactionBlockTimeout","transactionConfirmationBlocks","transactionPollingTimeout","transactionPollingInterval","blockHeaderTimeout","defaultCommon","defaultChain","defaultHardfork","handleRevert","setRequestManager","createFunction","buildCall","attachToObject","getCall","extractCallback","validateArgs","formatInput","formatter","formatOutput","toPayload","payload","_confirmTransaction","defer","promiseResolved","canUnsubscribe","timeoutCount","confirmationCount","intervalId","blockHeaderTimeoutId","lastBlock","gasProvided","isContractDeployment","hasBytecode","_ethereumCalls","subscriptions","subscriptionName","_ethereumCall","mthd","checkConfirmation","existingReceipt","isPolling","blockHeader","sub","unsubscribe","clearInterval","clearTimeout","getTransactionReceipt","_fireError","eventEmitter","receiptFormatter","listeners","getBlockByNumber","latestBlock","latestBlockHash","removeAllListeners","getCode","contractDeployFormatter","outOfGas","revertMessage","txReplayOptions","rawTransactionHex","parsedTx","toHexString","getRevertReason","startWatching","blockHeaderArrived","startInterval","setInterval","subscribe","getWallet","wallet","privateKey","_handleTxPricing","toHex","getGasPrice","responses","mul","isSendTx","isCall","send","sendTxCallback","reasonData","isRevertReasonString","decodeParameter","sendSignedTx","signedPayload","rawTransaction","sendRequest","chain","hardfork","common","signTransaction","txPricing","request","txOptions","PromiEvent","justPromise","emitter","_events","once","off","addListener","removeListener","Jsonrpc","Batch","requests","execute","sortResponses","_sortResponses","sendBatch","results","isValidResponse","globalThis","web3","sendAsync","connection","BatchManager","RequestManager","net","providers","WebsocketProvider","HttpProvider","IpcProvider","connect","connected","clearSubscriptions","subscription","deprecatedResult","resubscribe","_isCleanCloseEvent","_isIpcCloseError","delete","jsonrpcPayload","jsonrpcResultCallback","_jsonrpcResultCallback","callbackRequest","toBatchPayload","addSubscription","removeSubscription","keepIsSyncing","wasClean","Manager","messageId","jsonrpc","validateSingleMessage","Subscription","identity","_extractCallback","_validateArgs","_formatInput","_formatOutput","_toPayload","subscriptionMethod","err1","err2","blockParams","resultItem","subscriptionHandler","pckg","ex","extension","extendedObject","methods","extend","packageInit","pkg","_provider","manager","BatchRequest","addProviders","EthersAbiCoder","ParamType","ethersAbiCoder","Result","ABICoder","encodeFunctionSignature","functionName","_jsonInterfaceMethodToString","encodeEventSignature","encodeParameter","param","encodeParameters","mapTypes","formatParam","modifyParams","coder","_getCoder","coders","mappedTypes","isSimplifiedStructFormat","structName","mapStructNameAndType","components","mapStructToCoderFormat","paramTypeBytes","paramTypeBytesArray","paramTypeNumber","paramTypeNumberArray","isBN","leftPad","maxSize","rightPad","encodeFunctionCall","jsonInterface","inputs","decodeParameters","outputs","decodeParametersWith","loose","returnValue","__length__","decodedValue","decodeLog","notIndexedInputs","indexedParams","topicCount","indexed","staticType","nonIndexedData","notIndexedParams","version","logger","Logger","_constructorGuard","ModifiersBytes","calldata","memory","storage","ModifiersNest","checkModifier","throwArgumentError","populate","defineReadOnly","FormatTypes","freeze","sighash","minimal","full","paramTypeArray","constructorGuard","throwError","operation","arrayLength","arrayChildren","fromObject","baseType","_isParamType","comp","allowIndexed","fromString","isParamType","verifyType","originalParam","newNode","parent","allowType","allowParams","child","allowName","allowArray","sibling","readArray","parseParamType","Coder","localName","Writer","wordSize","_data","_dataLength","_padding","hexConcat","writer","_writeData","arrayify","paddingOffset","_getValue","Reader","coerceFunc","allowLoose","_offset","hexlify","_coerceFunc","coerce","alignedLength","_peekBytes","readBytes","AddressCoder","_throwError","writeValue","reader","hexZeroPad","readValue","AnonymousCoder","pack","arrayValues","unique","argument","staticWriter","dynamicWriter","updateFuncs","dynamicOffset","updateFunc","writeUpdatableValue","baseOffset","appendWriter","unpack","baseReader","subReader","offsetReader","uniqueNames","accum","ArrayCoder","count","checkArgumentCount","BooleanCoder","DynamicBytesCoder","writeBytes","BytesCoder","FixedBytesCoder","NullCoder","NumberCoder","signed","maxUintValue","MaxUint256","bounds","mask","One","NegativeOne","Zero","toTwos","fromTwos","StringCoder","toUtf8Bytes","toUtf8String","TupleCoder","AbiCoder","checkNew","component","_getWordSize","_getWriter","_getReader","core","Account","cryp","scrypt","helpers","TransactionFactory","Common","HardForks","ethereumjsUtil","isNot","isExist","Accounts","Wallet","_accounts","defaultKeyName","_addAccountFunctions","encrypt","password","entropy","randomHex","privateKeyToAccount","ignoreLength","fromPrivate","transactionOptions","hasTxSigningOptions","customChain","_validateTransactionForSigning","accessList","forCustomChain","baseChain","networkId","London","signedTx","fromTxData","validationErrors","errorString","validationError","serialize","keccak256","messageHash","getMessageToSign","txType","hasEip1559","Berlin","_handleTxType","getChainId","getTransactionCount","getNetworkId","txchainId","txnonce","txnetworkId","txgasInfo","recoverTransaction","rawTx","fromSerializedData","getSenderAddress","hashMessage","messageHex","messageBytes","hexToBytes","messageBuffer","preamble","preambleBuffer","ethMessage","bufferToHex","vrs","decodeSignature","recover","preFixed","encodeSignature","decrypt","v3Keystore","nonStrict","derivedKey","kdfparams","kdf","syncScrypt","salt","dklen","prf","pbkdf2Sync","ciphertext","mac","decipher","createDecipheriv","cipher","cipherparams","iv","seed","update","final","createCipheriv","_findSafeIndex","pointer","_currentIndexes","numberOfAccounts","remove","addressOrIndex","encryptedWallet","keystore","keyName","setItem","load","getItem","removeItem","storageAvailable","assert","superCtor","super_","TempCtor","BN","endian","negative","red","_init","parseHex4Bits","string","parseHexByte","lowerBound","parseBase","start","end","move","dest","src","_initNumber","_initArray","_parseHex","_parseBase","w","_strip","limbLen","limbPow","total","imuln","_iaddn","_move","_expand","_normSign","for","zeros","groupSizes","groupBases","groupBase","modrn","idivn","toBuffer","toArrayLike","smallMulTo","ncarry","rword","maxJ","ArrayType","byteLength","reqLength","allocate","_toArrayLikeLE","_toArrayLikeBE","clz32","_countBits","_zeroBits","bitLength","hi","zeroBits","inotn","iaddn","testn","notn","ineg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","FFTM","mulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","ws","convert13b","stub","ph","mulp","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","isNegNum","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","iushrn","hint","extended","h","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","diff","qj","divmod","positive","divn","umod","divRound","dm","r2","andln","acc","modn","egcd","A","B","C","D","g","isEven","yp","xp","im","jm","gcd","_invmp","delta","cmpn","invm","bincn","ucmp","gtn","gten","ltn","lten","eqn","Red","toRed","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","tmp","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","outLen","mod3","one","nOne","lpow","inv","wnd","currentLen","mont","u","stateRoot","codeHash","externals_1","constants_1","_validate","accountData","serialized","fromValuesArray","bnToUnpaddedBuffer","equals","hexAddress","assertIsString","eip1191ChainId","assertIsHexString","stripHexPrefix","toType","types_1","keccakFromString","isValidAddress","assertIsBuffer","nonceBN","rlphash","initCode","privateKeyVerify","publicKey","sanitize","publicKeyVerify","pubKey","publicKeyConvert","keccak","publicKeyCreate","publicToAddress","privateToPublic","zeroAddress","Address","pubToAddress","privateToAddress","generateAddress","generateAddress2","addressBN","rangeMin","rangeMax","isSafeInteger","hex","intToHex","padToEven","setLength","stripZeros","assertIsArray","isHexString","intToBuffer","isHexPrefixed","ba","baToJSON","_c","arrToBufArr","bufArrToArr","buffer_1","bn_js_1","createHash","keccak224","keccak384","keccak512","_sha256","digest","_ripemd160","padded","setLengthLeft","__exportStar","getBinarySize","arrayContainsArray","toAscii","fromAscii","getKeys","superset","subset","some","fromCharCode","allowEmpty","fields","_fields","obj_1","field","getter","setter","allowZero","allowLess","unpadBuffer","keys_1","calculateSigRecovery","vBN","chainIdBN","isValidSigRecovery","recovery","rec","msgHash","ecdsaSign","senderPubKey","ecdsaRecover","vn","ss","sig","bufferToInt","homesteadOrLater","SECP256K1_N_DIV_2","SECP256K1_N","rBN","sBN","TypeOutput","outputType","lastArg","_getOrSetDefaultOptions","_address","_jsonInterface","funcName","stateMutability","payable","_createTxObject","cascadeFunc","nextMethod","_on","allEvents","_ethAccounts","_getCallback","_checkListener","_encodeEventABI","anonymous","indexedTopics","_decodeEventABI","intf","indexedInputs","argTopics","returnValues","_encodeMethodABI","methodSignature","_method","paramsABI","_parent","inputLength","_deployData","_decodeMethodReturn","deploy","deployData","_generateEventOptions","subOptions","removed","getPastEvents","getPastLogs","txObject","_executeMethod","encodeABI","estimateGas","createAccessList","_processExecuteArguments","processedArgs","generateRequest","ethAccounts","ev","newContract","Registry","ResolverMethodHandler","contenthash","ENS","eth","registryAddress","_detectedAddress","_lastSyncCheck","supportsInterface","interfaceId","getResolver","resolver","setResolver","txConfig","setRecord","owner","setSubnodeRecord","setApprovalForAll","operator","approved","isApprovedForAll","recordExists","setSubnodeOwner","getTTL","setTTL","getOwner","setOwner","resolverMethodHandler","setAddress","getPubkey","setPubkey","getContent","setContent","getContenthash","setContenthash","encoded","getMultihash","setMultihash","checkNetwork","getBlock","headAge","getNetworkType","networkType","main","ropsten","rinkeby","goerli","interfaceIds","setAddr","pubkey","content","namehash","REGISTRY_ABI","RESOLVER_ABI","ens","ensName","methodName","methodArguments","preparedArguments","prepareArguments","checkInterfaceSupport","handleCall","sendOptions","handleSend","confirmationNumber","unshift","contentHash","decoded","protocolType","codec","getCodec","contentType","matched","fromIpfs","fromSwarm","iso13616Prepare","Z","mod9710","remainder","_iban","isIndirect","base36","asBn","ib","fromAddress","fromBban","bban","countryCode","institution","identifier","Net","Personal","getId","givenId","genesis","BaseContract","blockCall","transactionFromBlockCall","uncleCall","getBlockTransactionCountCall","uncleCountCall","Eth","personal","maxListenersWarningThreshold","removeSubscriptionById","_isSyncing","_isSyncingTimeout","XHR2","http","https","withCredentials","agent","keepAlive","httpsAgent","Agent","httpAgent","_prepareRequest","XMLHttpRequest","agents","nodejsSet","open","setRequestHeader","header","onreadystatechange","readyState","responseText","ontimeout","supportsSubscriptions","oboe","responseCallbacks","notificationCallbacks","addDefaultEvents","_parseResponse","_timeout","lastChunk","lastChunkTimeout","_addResponseCallback","reconnect","isNode","isRN","navigator","product","_btoa","URL","newURL","btoa","parseURL","Ws","_customTimeout","protocol","reconnectOptions","auto","delay","maxAttempts","onTimeout","clientConfig","requestOptions","DATA","CLOSE","ERROR","CONNECT","RECONNECT","requestQueue","responseQueue","reconnectAttempts","reconnecting","parsedURL","username","authorization","auth","OPEN","_addSocketListeners","_onMessage","_onConnect","_onClose","_removeSocketListeners","addEventListener","removeEventListener","CONNECTING","close","Shh","ethjsUnit","soliditySha3","randombytes","_flattenTypes","includeTuple","puts","arrayBracket","hexToAscii","asciiToHex","getUnitValue","unit","unitMap","optionalData","sha3Raw","soliditySha3Raw","encodePacked","checkAddressChecksum","addressHash","checksumAddress","bytesToHex","toDecimal","fromDecimal","hexToUtf8","hexToString","stringToHex","toWei","fromWei","padLeft","padRight","toTwosComplement","isBloom","isUserEthereumAddressInBloom","isContractAddressInBloom","isTopic","isTopicInBloom","isInBloom","compareBlockNumbers","bnA","bnB","_parseNumber","_solidityPack","arraySize","typesize","exec","_parseTypeN","_processSolidityEncodePackedArgs","_parseTypeNArray","hexArgs","numberToBN","utf8","ethereumBloomFilters","returnType","SHA3_NULL_S","_Hash","bloom","ethereumAddress","chars","hasPrefix","Web3","shh","modules","Transform","duplexify","WS","stream","socket","isBrowser","title","isNative","WebSocket","socketWrite","socketWriteBrowser","enc","bufferedAmount","bufferSize","bufferTimeout","coerceToBuffer","objectMode","binary","proxy","socketEnd","_write","_flush","buildProxy","_writev","writev","browserBufferSize","browserBufferTimeout","binaryType","eventListenerSupport","onopen","onclose","onerror","onmessage","setReadable","setWritable","destroy","buffers","MozWebSocket","_globalThis","NativeWebSocket","websocket_version","W3CWebSocket","uri","availableTypedArrays","callBound","$toString","hasToStringTag","typedArrays","$slice","toStrTags","gOPD","typedArray","proto","superProto","foundName","tryTypedArrays","bs58check","decodeRaw","compressed","encodeRaw","wrappy","wrapper","queryString","setQuery","ensureHeader","mimeTypeJson","noop","opt","defaultResponse","responseType","lower","resp","statusCode","rawRequest","xhr","normalize","useJson","req","onabort","parseHeaders","xtend","initParams","createXHR","_createXHR","called","getBody","responseXML","firefoxBugTakenEffect","documentElement","nodeName","getXml","isJson","errorFunc","evt","timeoutTimer","failureResponse","loadFunc","aborted","useXDR","getAllResponseHeaders","cors","XDomainRequest","sync","onload","onprogress","abort","isEmpty","beforeSend","forEachArray","__extends","__export","XMLHttpRequestEventTarget","eventType","listener","handleEvent","_reset","XMLHttpRequestUpload","_contentType","_body","view","byteOffset","loweredHeaders","xml_http_request_event_target_1","UNSENT","OPENED","HEADERS_RECEIVED","LOADING","DONE","xml_http_request_upload_1","TRACE","TRACK","cookie","cookie2","dnt","expect","referer","te","trailer","upgrade","via","os","arch","versions","v8","_anonymous","anon","user","_restrictedMethods","SecurityError","xhrUrl","_parseUrl","_url","_sync","_headers","_loweredHeaders","_mimeOverride","_setReadyState","_request","_response","_responseParts","_responseHeaders","_loadedBytes","_totalBytes","_lengthComputable","InvalidStateError","loweredName","_restrictedHeaders","_sendFile","_sendHttp","NetworkError","_setError","_dispatchProgress","mimeType","nodejsHttpAgent","nodejsHttpsAgent","SyntaxError","nodejsBaseUrl","dispatchEvent","progress_event_1","_setData","_finalizeHeaders","_sendHxxpRequest","cookieJar","getCookies","Cookie","CookieAccessInfo","hostname","pathname","toValueString","hxxp","requestMethod","port","_onHttpTimeout","_onHttpResponse","_onHttpRequestError","_startUpload","__assign","Connection","Host","_userAgent","Referer","setCookies","location","_onHttpResponseData","_onHttpResponseEnd","_onHttpResponseClose","responseUrl","href","STATUS_CODES","_parseResponseHeaders","lengthString","ProgressEvent","lengthComputable","loaded","urlString","absoluteUrl","xhrUser","xhrPassword","name_1","_privateHeaders","_a","arrayBuffer","_parseResponseEncoding","_b","errors_1","CookieJar","globalAgent","$$observable","ponyfill_1","globalthis_1","NO","cp","_try","NO_IL","internalizeProducer","producer","_start","il","_stop","_stream","_listener","StreamSub","_remove","Observer","observable","ins","active","FromObservable","_sub","insArr","ac","Merge","L","_add","ils","CombineListener","up","vals","Nc","Nn","Combine","FromArray","FromPromise","intervalID","Periodic","Debug","dropped","Drop","EndWhenListener","oil","EndWhen","passes","Filter","FlattenListener","inner","less","Flatten","Fold","Last","project","MapOp","Remember","replacer","ReplaceError","StartWith","taken","Take","_prod","_ils","_stopID","_dl","_target","_err","Stream","_x","ta","_stopNow","_pruneCycles","_hasNoSinks","MemoryStream","fromObservable","fromPromise","fromArray","items","obs","endWhen","_map","projectedValue","f1","f2","initial","other","accumulate","labelOrSpy","streams","_v","_has","mapTo","take","replaceError","debug","xs"],"sourceRoot":""}